google.guava.countinginputstream在逐行遍历文件时未给出正确的偏移量

kiayqfof  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(218)

我试图通过从头到尾读取文件来获得行开始偏移量。我的目的是建立一个索引[line\u number-->start\u offset in file]。下面使用guava库,示例代码和使用的库如下。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.0-jre</version>
</dependency>
try {
    ByteSource byteSource = Files.asByteSource(new File(filePath));
    CountingInputStream cStream = new CountingInputStream(byteSource.openStream());
    Iterator<String> lines = byteSource.asCharSource(defaultCharset()).lines().iterator();
    //lines.forEachRemaining((line) -> System.out.println(input.getCount()));
    while (lines.hasNext()) {
        //String line = lines.next();
        //System.out.println(line);
        System.out.println("OFFSET:" + cStream.getCount());
    }   
} catch (IOException e) {
    e.printStackTrace();
}

输出:

OFFSET:0
OFFSET:0
OFFSET:0
OFFSET:0
.
.
.

尽管它打印了行的内容(如果我取消对代码的注解- System.out.println(line) ),所有线偏移为0。为什么偏移量正确( line_start )没有返回,上面的代码段中缺少什么?我需要手动跳过行吗 cStream.skip(line.length()); 每一次,然后做 cStream.getCount() ? 有没有其他建议的方法来实现这一点?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题