我需要使用Java(在android上)将文件的最后100个字节移动到文件的开头。在做了一些研究之后,我有了一个可行的解决方案,但对于我正在使用的一些较大的文件来说它太慢了(最多2GB)。我最初尝试在RandomAccessFile对象上使用read()方法并且它太慢了,所以经过一些挖掘之后,我找到了另一种使用BufferedInputStream的方法,但它似乎根本没有提高性能。
我认为必须有一种更简单,更容易,更快捷的方法。
这是我的工作代码太慢了:
vehiclesDataTable.clear();
$('#vehiclesTable').empty();
有什么方法可以加快我的速度吗?我完全是错误的做法吗?我用C#和FileStream对象进行设置,并在几秒钟内移动字节(即使是2GB文件)但是使用上面的方法,它实际上需要几个小时。
TIA
答案 0 :(得分:1)
如前所述,逐字节I / O操作会降低性能。
合适的方式是:
InputStream
在一个或几个I / O操作中填充缓冲区OutputStream
在一个或几个I / O操作中将缓冲区刷新到磁盘在Java中(仅使用您已使用过的类):
byte[] buf = new byte[4096];
// lengthRead is the count of bytes read
int lengthRead = inputStream.read(buf);
doBufferMagic(buf, lengthRead);
outputStream.write(buf, 0, lengthRead);