阅读大型对象文本文件的最快方式

时间:2015-10-20 03:44:49

标签: java file-handling

我将超过40,000个对象存储到文本文件中。我的问题是从文本文件中读取所有对象太慢了。对于1,000个对象 - 文本文件,它甚至需要4349毫秒。

这是从文本文件中读取对象。

#if (some condition)
     ## Do something 
#elseif (some condition)
     ## Do something
#else
     ## Do something else
#end

有没有更快的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试的简单优化是为输入流处理添加缓冲。在你写的时候,每次读取都可能会击中你的磁盘。如果您执行较少的物理读取(在较大的块中),您可能会看到性能提升。

int bufferSize = 16 * 1024;
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(f), bufferSize));

当通过ObjectInputStream读取字节时,它们实际上是从BufferedInputStream缓冲区在内存中读取的。当此缓冲区变空(已全部读取)时,BufferedInputStream将从FileInputStream中重新填充缓冲区。

您可以尝试使用不同的缓冲区大小来确定I / O操作数与内存开销之间的适当平衡。

答案 1 :(得分:1)

尝试使用NIO,它有许多增强功能和缓冲

    RandomAccessFile aFile = new RandomAccessFile("test.txt", "r");
    FileChannel inChannel = aFile.getChannel();
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    int read;
    while((read = inChannel.read(buffer)) != -1){
        os.write(buffer, 0, read);
    }
    inChannel.close();
    aFile.close();

上面的代码是固定宽度的缓冲区大小