我将 40,000 多个对象存储到一个文本文件中。我的问题 是从文本文件中读取所有对象的速度太慢。 1,000 个对象文本文件甚至需要 4349 毫秒。
这是从文本文件中读取对象。
long startR = System.currentTimeMillis();
try{
ois = new ObjectInputStream(new FileInputStream(f));
code_from_file.clear();
Codes obj = new Codes();
while( (obj = (Codes) ois.readObject()) != null){
if(obj instanceof Codes){
code_from_file.add(obj);
}
}
}catch (EOFException ex){
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally{
try {
if (ois != null){
ois.close();
}
} catch (IOException ex){
ex.printStackTrace();
}
}
long endR = System.currentTimeMillis();
System.out.println("Read code from file : " + (endR - startR) + "ms");
有没有更快的方法解决这个问题?
最佳答案
一个简单的优化尝试是为您的输入流处理添加缓冲。在您编写它时,每次读取都可能会击中您的磁盘。如果您进行较少的物理读取(在较大的 block 中),您可能会看到性能提升。
int bufferSize = 16 * 1024;
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(f), bufferSize));
当通过 ObjectInputStream 读取字节时,它们实际上是从 BufferedInputStream 的缓冲区中读取到内存中的。当此缓冲区变空(已全部读取)时,BufferedInputStream 将在从 FileInputStream 的一次大读取中重新填充缓冲区。
您可以试验不同的缓冲区大小,以确定 I/O 操作数与内存开销之间的适当平衡。
关于java - 读取大型对象文本文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33227624/