使用Java从文件末尾移动100个字节到文件的开头(RandomAccessFile太慢)

时间:2017-10-18 19:35:22

标签: java android fileoutputstream randomaccessfile bufferedinputstream

我需要使用Java(在android上)将文件的最后100个字节移动到文件的开头。在做了一些研究之后,我有了一个可行的解决方案,但对于我正在使用的一些较大的文件来说它太慢了(最多2GB)。我最初尝试在RandomAccessFile对象上使用read()方法并且它太慢了,所以经过一些挖掘之后,我找到了另一种使用BufferedInputStream的方法,但它似乎根本没有提高性能。

我认为必须有一种更简单,更容易,更快捷的方法。

这是我的工作代码太慢了:

        vehiclesDataTable.clear();
        $('#vehiclesTable').empty();

有什么方法可以加快我的速度吗?我完全是错误的做法吗?我用C#和FileStream对象进行设置,并在几秒钟内移动字节(即使是2GB文件)但是使用上面的方法,它实际上需要几个小时。

TIA

1 个答案:

答案 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);