Java:I / O,read()不会填充缓冲区?

时间:2012-08-13 11:15:35

标签: java sockets file-io buffer

我正在学习I / O,文件和套接字,我不明白这句话的含义

  

读取并不总是填充缓冲区

这是什么意思?有人对我有一些解释吗?

3 个答案:

答案 0 :(得分:2)

"read will not always fill a buffer"

上述句子表示Buffer有一个size 填充后自动刷新但是假设读入缓冲区的数据不够填写缓冲区 ...然后你需要手动冲洗它。

有关详细信息,请阅读Kathy Sierra的SCJP Programmer guideThinking in Java's IO章

答案 1 :(得分:1)

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

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

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

标准实现混合了两者:它等待至少有一个字节可用。

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

答案 2 :(得分:1)

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