使用ByteBuffer和FileChannel结束文件

时间:2014-04-11 04:20:57

标签: java bytebuffer filechannel

我写了一个小代码,说

ByteBuffer buffer = ByteBuffer.allocate(10);
int w= fc.read(buffer);
System.out.println(w);
w= fc.read(buffer);
System.out.println(w);
w= fc.read(buffer);
System.out.println(w);

说文件包含10个字节,屏幕上显示的结果是10,0,0,但是没有-1作为文件的结尾,为什么?

2 个答案:

答案 0 :(得分:2)

如果int方法返回的read()为-1,则表示您已到达文件的末尾。

编辑重新编辑,read()方法返回的值为计数。

第一次,你读取10个字节,缓冲区的容量是10个字节,所以你(a)打印10和(b)填充缓冲区。

所有其他时间,缓冲区已经满了,因为你没有clear()它,所以没有读取任何内容并返回零,所以你打印零。

如果您在第一个buffer.clear()后拨打read(),则下一个read()将返回-1。

答案 1 :(得分:0)

如果读者返回的int为-1​​,那么您已到达文件末尾。

例如: -

Reader reader = new FileReader("yourfilename");

int data = reader.read();

if(data != -1){
 // your code
}