从大型文件读取时,我从这段代码中获得了一些奇怪的输出,文件使用while循环打印到99,999位,但是在读取文件并打印内容时它只输出99,988行 . 另外,使用ByteBuffer是读回文件的唯一选择吗?我已经看过一些使用CharBuffer的其他代码,但我不确定应该使用哪一个,以及在什么情况下我应该使用它们 . 注意:filePath是指向磁盘上文件的Path对象 .
private void byteChannelTrial() throws Exception {
try (FileChannel channel = (FileChannel) Files.newByteChannel(filePath, READ)) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
String encoding = System.getProperty("file.encoding");
while (channel.read(buffer) != -1) {
buffer.rewind();
System.out.print(Charset.forName(encoding).decode(buffer));
buffer.clear();
}
}
3 回答
通常,在读取缓冲区数据之前调用flip() . rewind()方法确实如下工作:
它没有像flip()那样设置'limit':
因此,在阅读之前使用flip()而不是倒带()来托盘 .
对于阅读文本,BufferedReader是最好的
BTW
相当于
嗯,事实证明这个组合有效:
至于它为何起作用,我不太确定 .