java - 是否可以在 Java 中有效地跳过未知大小的行?

标签 java file

在用 Java 读取非常大的文件(GB 级)时,我确切地知道我需要处理哪些行。但是,我不知道每行的大小,它们可能不同。

我的问题如下:

你有跳过无用行的有效方法吗?我的(天真的)方法包括读取行而不是处理它,但这听起来像是在浪费时间和内存空间。

我正在寻找的代码可能如下所示:

SortedMap goodLineNumbers = ......

Int  currentLineNumber = 1;

try(BufferedReader br = new BufferedReader(new FileReader(tracefile))) {

    do{
         if(goodLineNumbers.containsKey(currentLineNumber)) {
               line = br.readLine();    
               // process line
         } else  {
              line = EfficientSkip(br); // don't know the size of the line
         }
         currentLineNumber++;
    }
    while(line != null);
} catch (IOException e) {           
    e.printStackTrace();
}

最佳答案

如果您不希望 BufferedReader 为您不需要的行创建字符串,请按字符读取输入,按 EOL 计算行数,并在您位于所需行的开头时使用 BufferedReader.readLilne()。不过,我不确定它是否会提高整体性能。

关于java - 是否可以在 Java 中有效地跳过未知大小的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442210/

相关文章:

c - 当文件描述符关闭时,有什么方法可以执行回调(在 Linux 上)

java - 无法使用 mkdirs() 创建目录

java - 如何使用 Tomcat 8 + Spring Boot + Maven

java - 传递数组引用时,如何更改对其他数组的引用?

android - 如何读取 .txt 并将其显示为 Android 中的 TextView?

无法从 C 中的文本文件中读取所有名称

c# - x 深度的所有文件夹和文件的列表

java - 在 Java 中将 DOM 节点呈现为字符串而不指定 namespace

java - 使用prefer-web-inf-classes时weblogic中的ClassCastException

java - MailChimp 3.0 HTTP POST Json 示例