gpt4 book ai didi

java - 计算 char 流消耗的字节数

转载 作者:行者123 更新时间:2023-12-01 13:59:13 26 4
gpt4 key购买 nike

我的磁盘上有一个大文本文件 (csv),我将其分成几行。像这样的事情:

BufferedReader reader = new BufferedReader(new FileReader(file));
while ((line = reader .readLine()) != null) {
...
}

我想要做的是计算每 1,000 行距文件开头的偏移量,所以如果将来我想读取第 10,001 行,我可以直接跳到偏移量 X,然后开始迭代。

文件可以以任何方式编码,因此字节和字符之间没有很强的关系。

有人知道任何“计数读者”或替代方法吗?我很高兴自己实现一个 Reader,但如果可以避免的话,我不想编写一个非常复杂的类。

最佳答案

当您需要随机访问时,BufferedReader 不适合。相反,您需要查看 Channel 及其子类,例如 FileChannel 等。

使用 channel 读取的简单示例:

    RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {

System.out.println("Read " + bytesRead);
buf.flip();

while(buf.hasRemaining()){
System.out.print((char) buf.get());
}

buf.clear();
bytesRead = inChannel.read(buf);
}
aFile.close();

来源:http://tutorials.jenkov.com/java-nio/channels.html

至于你从哪里开始读取的问题,FileChannel定义了一个方法read(ByteBuffer buf,intposition),其中position是以字节为单位的位置,其中yu想要阅读。

关于java - 计算 char 流消耗的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436278/

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