gpt4 book ai didi

java - BufferReader.skip()性能

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:09 26 4
gpt4 key购买 nike

我可以看到以下两个程序之间的性能差异巨大。

import java.io.*;
import java.util.Date;

class SkipProg2 {

public static void main (String args[]) {

System.out.println (" File Reading "+ args.length);
System.out.println (" 1st Arg "+ args[0]);
System.out.println (" 2nd Arg "+ args[1]);
try {
FileInputStream fis = new FileInputStream(args[0]);

System.err.println("Time before skip : " + new Date());

Long off = Long.parseLong(args[1]);

fis.skip (off);
System.err.println("Time After skip : " + new Date());


InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr );

} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}
} // end main

}

import java.io.*;
import java.util.Date;

class SkipProg {

public static void main (String args[]) {

System.out.println (" File Reading "+ args.length);
System.out.println (" 1st Arg "+ args[0]);
System.out.println (" 2nd Arg "+ args[1]);
try {
FileInputStream fis = new FileInputStream(args[0]);

InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr );

System.err.println("Time before skip : " + new Date());
Long off = Long.parseLong(args[1]);

br.skip (off);
System.err.println("Time After skip : " + new Date());
} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}
} // end main

}

一种用法是FileInputStream.skip(),另一种用法是BufferReader.skip()。但是,如果偏移值较大,则存在巨大差异(例如 2 GB 的差异为 8 秒),并且在多线程应用程序中,相同代码的差异很大(对于 2 GB 偏移,大约有 15-20 分钟的延迟)。我无法用 FileInputStream.skip () 替换 BufferReader.skip (),因为一个以字节为单位获取偏移量,另一个以字符为单位获取偏移量。对于unicode文件来说,它是不可替代的。

第一个问题,我的假设是否正确?有什么建议?

提前致谢。

最佳答案

跳过字节可以跳过那么多字节而不读取它们。

字符跳过必须读取到该点的所有字符/字节才能找到第 N 个字符的位置。

令我惊讶的是,阅读 2 GB 的文本需要 15-20 分钟。我原本预计会接近 20 秒。你有什么样的硬件?

如果您想在文本文件中进行随机访问,则需要维护行号到字节位置的索引(这样所花费的时间将相同)

关于java - BufferReader.skip()性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com