如何在不将行加载到内存的情况下在任何文件中找到行的长度?

时间:2016-05-05 18:37:53

标签: java xml file memory-management

我正在编写一个可以处理50-60GB文件的java程序。该文件的一行可能是2-3GB,如果加载会破坏我的JVM。我想找到这一行的长度,所以我知道这行是否可以进入DOM解析器或SAX解析器。本文档的每一行都是一个单独的XML。我似乎有很多方法来获得长度,但它们都涉及将它们加载到内存中来计算它。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:4)

使用Reader.read()将一些字符读入固定大小的缓冲区,然后扫描缓冲区。

答案 1 :(得分:0)

您可以使用LineNumberReader

public static long getLineCount(Reader reader)
throws IOException {
    LineNumberReader lineNumberReader = new LineNumberReader(reader);
    lineNumberReader.skip(Long.MAX_VALUE);
    return lineNumberReader.getLineNumber();
}