Bri*_*ker 0 java android fileoutputstream
我有一个应用程序,使用从Socket InputStream获取的字节数组创建多个文件.当我只保存一个文件时,文件保存完美,但如果我保存一个文件然后重新实例化文件流并保存另一个文件,则第一个文件被破坏,第二个文件被完美保存.我在文本编辑器中打开了两个文件,似乎(约......)第一个文件的前1/5是空格但第二个文件已满,它们都具有相同的大小属性(9,128,731字节).以下示例是senario的重复,但具有相同的损坏结果:
FileOutputStream outStream;
outStream = new FileOutputStream("/mnt/sdcard/testmp3.mp3");
File file = new File("/mnt/sdcard/test.mp3");
FileInputStream inStream = new FileInputStream(file);
byte[] buffer = new byte[9128731];
inStream.read(buffer);
outStream.write(buffer, 0, buffer.length);
inStream.close();
outStream.flush();
outStream.close();
outStream = null;
outStream = new FileOutputStream("/mnt/sdcard/testmp32.mp3");
outStream.write(buffer, 0, buffer.length);
inStream.close();
outStream.flush();
outStream.close();
outStream = null;
Run Code Online (Sandbox Code Playgroud)
我在常规Java应用程序中尝试了这个EXACT代码,并且两个文件都保存没有问题.有谁知道为什么android会这样做?
任何帮助将不胜感激
正如jtahlborn所提到的那样,你不能认为InputStream.read(byte[])总会读出你想要的字节数.同样,你应该避免使用这么大的字节数组一次写出来.至少没有缓冲,你可能会溢出一些东西.您可以通过复制文件来处理这些问题并节省一些内存:
File inFile = new File("/mnt/sdcard/test.mp3");
File outFile = new File("/mnt/sdcard/testmp3.mp3");
FileInputStream inStream = new FileInputStream(inFile);
FileOutputStream outStream = new FileOutputStream(outFile);
byte[] buffer = new byte[65536];
int len;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
outStream.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7588 次 |
| 最近记录: |