我尝试测量使用 NIO(读取单个文件最慢)、BufferedInputStream 和逐行读取文件(每次通过平均 600 毫秒)然后使用 Filereader 和数组读取文件的几种方法的性能固定大小作为缓冲区(最快)
文件是 Windows .txt 文件格式的 95 MB 纯文本。将字符转换为字符串确实是瓶颈,但我注意到这种方法的内存消耗巨大。对于 95 MB 的 lorem ipsum,这会消耗多达 1 GB 的 RAM。我还没找到原因。
我尝试过的没有效果:
通过调用 System.gc() 发出垃圾收集器 在方法结束之前将所有指针变量设置为 null(但无论如何它们都应该是,它们仅在方法内定义)。
private void testCharStream() {
File f = f = new File("c:/Downloads/test.txt");
long oldTime = System.currentTimeMillis();
char[] cbuf = new char[8192];
StringBuilder builder = new StringBuilder();
try {
FileReader reader = new FileReader(f);
while (reader.read(cbuf) != -1) {
builder.append(cbuf);
}
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long currentTime = System.currentTimeMillis();
System.out.println(currentTime - oldTime);
}