-1
我需要将文件的最后100个字节移动到Java文件的开头(在android上)。在做了一些研究之后,我有一个工作解决方案,但对于我正在使用的一些较大的文件(高达2GB)来说,速度太慢。我最初尝试在RandomAccessFile对象上使用read()方法,而且速度太慢了,所以在进一步挖掘之后,我发现了另一种使用BufferedInputStream的方法,但它看起来并没有提高性能。将100个字节从文件结尾移动到Java文件的起始位置(RandomAccessFile太慢)
我在想这应该是一个更简单,更简单,更快速的方法来做到这一点。
这里是工作的代码,我有一个实在是太慢了:
File file = new File(Environment.getExternalStorageDirectory()+"/sam.dll");
RandomAccessFile f;
OutputStream f1;
try {
f = new RandomAccessFile(file, "r");
long size = file.length();
f.seek(size - 100);
FileInputStream fis = new FileInputStream(f.getFD());
BufferedInputStream bis = new BufferedInputStream(fis);
try {
f1 = new FileOutputStream(new File((Environment.getExternalStorageDirectory()+"/sam.dl4")));
for(int i = 0; i < 100; i++) {
f1.write(bis.read());
}
f.seek(0);
bis = new BufferedInputStream(fis);
for(int j =0; j < size - 100;j++) {
f1.write(f.read());
}
f.close();
f1.close();
bis.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
Log.e("blah",e.toString());
} catch (IOException e) {
e.printStackTrace();
}
办法任何建议,我可以加快这?我是否完全用错误的方式来解决这个问题?我用C#用FileStream对象设置它,并且它以秒为单位移动字节(即使是2GB文件),但是使用上面的方法,它实际上花费了几个小时。
TIA
这甚至没有任何意义。 100位不是整数个字节。 – chrylis
当与C#比较时,你在哪里运行比较 - 在具有不同CPU/IO特征的Windows机器上,或者通过Xamarian/mono进行Android操作? –
不要按字节读写。分配一些缓冲区并读取和写入一些KB的块。 – blafasel