【发布时间】:2017-02-09 21:28:32
【问题描述】:
我尝试写入一个文件,我从套接字接收的数据,我将数据存储在一个数组中,但是当我写入它们时,文件变得太大了...... 我认为这是由于使用了大数组引起的,因为我不知道数据流的长度...
但是检查方法 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 中读取一点并将其复制到 OutputStream 中,例如每次 512 字节到 8 KB。
-
@peter-lawrey 我怎样才能在不丢失流的情况下只读取几位...因为另一个流将会到来(同时...)
-
阅读
read方法的文档。它有一个有用的返回值
标签: java android arrays fileoutputstream