Java InputStream 中的 read() 和 readNBytes():究竟有什么区别?

java inputstream 中的 read() 和 readnbytes():究竟有什么区别?

java 的 InputStream 中读取数据:read() 与 readNBytes() 的区别

java 的 InputStream 提供了两种常见方法 read() 和 readNBytes() 来读取数据。虽然两者都被用于从流中读取字节,但它们有一些关键的区别

read() 方法:

  • 一次读取最多指定长度的字节。
  • 返回实际读取的字节数或 -1(如果流已结束)。
  • 该方法在流的末尾调用时,返回 -1。

readNBytes() 方法:

  • 尝试读取指定长度的字节。
  • 如果流已结束,则返回实际读取的字节数,当流中没有字节时返回 0。
  • 该方法会多次调用 read() 直到读取到指定长度的字节或到达流的末尾。

关键区别

  • 读取的字节数:read() 可能会读取比指定长度更少的字节,而 readNBytes() 会尝试读取指定长度的字节。
  • 返回值:read() 返回实际读取的字节数或 -1,而 readNBytes() 返回实际读取的字节数或 0(如果流已结束)。
  • 行为上的差异:read() 不会尝试读取流中剩余的所有字节,而 readNBytes() 会。

总之,readNBytes() 比 read() 更贪婪,因为它会尝试读取尽可能多的字节。readNBytes() 的实现也更复杂,因为它需要在内部循环调用 read() 直到达到指定长度或流的末尾。

以上就是Java InputStream 中的 read() 和 readNBytes():究竟有什么区别?的详细内容,更多请关注其它相关文章!