ファイルに書き込もうとします。ソケットから受け取ったデータを配列に格納しますが、書き込むとファイルが大きくなります。 .. データストリームの長さがわからないので、大きな配列を使用していると考えられます...write()メソッドを使用するとファイルが大きくなりすぎます
しかし、メソッドをチェックすると、write(byte [] b)指定されたバイト配列からこのファイル出力ストリームへのb.lengthバイト write()メソッドは配列の長さを読み取りますが、長さは2000 ... 書き込まれるデータの長さはどのように知ることができますか?
...
byte[] Rbuffer = new byte[2000];
dis = new DataInputStream(socket.getInputStream());
dis.read(Rbuffer);
writeSDCard.writeToSDFile(Rbuffer);
...
void writeToSDFile(byte[] inputMsg){
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() + "/download");
if (!(dir.exists())) {
dir.mkdirs();
}
Log.d("WriteSDCard", "Start writing");
File file = new File(dir, "myData.txt");
try {
FileOutputStream f = new FileOutputStream(file, true);
f.write(inputMsg);
f.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.i(TAG, "******* File not found. Did you" +
" add a WRITE_EXTERNAL_STORAGE permission to the manifest?");
} catch (IOException e) {
e.printStackTrace();
}
}
ファイル全体を一度に読み取るのではなく、ダウンロードして書き込むことができます。次に、どのようにするかは関係ありません。 InputStreamからビットを読み込み、一度に512バイトから8 KBまでOutputStreamにコピーします。 –
@ peter-lawreyどうすればストリームを失うことなく、ほんの少しのビットを読むことができますか?別のストリームが来ると(平均して...) –
'read'メソッドのためにdocを読んでください。それは便利なことになる戻り値を持っている – njzk2