我将超过40,000个对象存储到文本文件中。我的问题是从文本文件中读取所有对象太慢了。对于1,000个对象 - 文本文件,它甚至需要4349毫秒。
这是从文本文件中读取对象。
#if (some condition)
## Do something
#elseif (some condition)
## Do something
#else
## Do something else
#end
有没有更快的方法来解决这个问题?
答案 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();
上面的代码是固定宽度的缓冲区大小