2012-08-13 83 views
1

我学习的I/O,文件和套接字,我不明白这句话Java:I/O,read()不会填充缓冲区?

读的意义将永远填补不了一个缓冲

是什么意思?任何人对我有一些解释?

+0

我不知道为什么,但它添加了“家庭作业”标签,只是为了澄清这一点,这不是一个家庭作业问题,我只是想扩展我的知识和理解。 – Popokoko 2012-08-13 11:24:56

回答

1

read()方法接受一个字节数组,它将从流或读取器中填充。

如果没有可用于填充缓冲足够的数据,它可以

  • 等到足够的数据可用
  • 立即返回,但只提供了可用的数据,而不完全填充缓冲区。

标准实施方式确实是两者的混合:等待至少有一个字节可用。

注意:第二种情况意味着read()可能完全没有任何数据返回。

+0

它没有这些东西。它会阻塞,直到*至少有一个*字节可用,并返回实际读取的计数字节。请参阅Javadoc以获取InputStream.read()。 -1 – EJP 2012-08-13 13:11:15

2
"read will not always fill a buffer" 

上面这句话意味着Buffer有一定size这是自动刷新时填写,但是假设数据是读入缓冲区不够填充缓冲区 ...然后你需要手动刷新它。

为了进一步了解详情阅读SCJP Programmer guide凯西塞拉利昂或Thinking in Java'sIO章

+0

谢谢,很好解释,这个答案和我在这里收到的另一个答案一样好:) – Popokoko 2012-08-13 11:33:06

+0

欢迎你.. – 2012-08-13 11:47:15

+2

没有这样的操作来刷新输入缓冲区。 -1 – EJP 2012-08-13 13:11:55

1

它将阻塞,直到至少有一个字节可用,并且返回可以在该点读取的字节数而不会再次阻塞。看到Javadoc。