我嘗試寫入文件,從套接字接收的數據,我將數據存儲在數組中,但是當我寫入數據時,文件變得太大。我認爲這是由於使用一個大陣列,因爲我不知道數據流的長度...使用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中讀取一點並將其複製到OutputStream,一次說512字節到8 KB。 –
@ peter-lawrey如何在不丟失數據流的情況下只讀取幾位數據......因爲另一個數據流將來到(同時......) –
閱讀「read」方法的文檔。它有一個有用的返回值 – njzk2