2017-07-16 8 views
0

アセットファイルを開きます。 Javaコードが動作する前に、私はkotlinにコードを変更しても機能しません。Android Kotlin公開アセットファイル

Javaコードの作業

 InputStream streamIN = new BufferedInputStream(context.getAssets().open(Database.ASSET)); 
     OutputStream streamOU = new BufferedOutputStream(new FileOutputStream(LOCATION)); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = streamIN.read(buffer)) > 0) { 
      streamOU.write(buffer, 0, length); 
     } 

     streamIN.close(); 
     streamOU.flush(); 
     streamOU.close(); 

あなただけですので、私はKotlinにコードを変更するが、それはあなたのKotlinコードにはループがありません

var length: Int 
    val buffer = ByteArray(1024) 
    BufferedOutputStream(FileOutputStream(LOCATION)).use { 
     out -> 
     { 
      BufferedInputStream(context.assets.open(Database.ASSET)).use { 
       length = it.read(buffer) 
       if (length > 0) out.write(buffer, 0, length) 
      } 

      out.flush() 
     } 
    } 
+0

正確には動作しません。例外はありますか? – Mibac

+0

例外はありません。私のアプリケーションをデバッグしていたとき、デバッガはラムダ関数(BufferedOutputStream)の中に入っていません – kibar

答えて

3

動作しません。最初の1024バイトを読み書きします。

FileOutputStream(LOCATION).use { out -> 
    context.assets.open(Database.ASSET).use { 
     it.copyTo(out) 
    } 
} 

注1:

は、ここにそれを書くのKotlinの方法ですあなたがコピー操作自体はすでにバイトのバッファを使用するためのInputStreamまたはOutputStreamをバッファリングする必要はありません。

注2: OutputStreamを閉じると、自動的にフラッシュされます。

+0

wooow ..素晴らしい! – kibar

関連する問題