Java中的InputStream read()如何确定要读取的字节数?

时间:2014-08-01 19:49:59

标签: java inputstream

http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()

文档说"从输入流中读取一些字节并将它们存储到缓冲区数组b中。"。

Java中的InputStream read()如何确定字节数?

2 个答案:

答案 0 :(得分:1)

缓冲区数组有一个定义的长度,称之为nread()方法将在1和n字节之间读取。除非检测到EOF,否则它将阻塞,直到至少有一个字节可用。

答案 1 :(得分:0)

我认为混淆来自于"阅读"装置

read()返回InputStream中的下一个字节,如果没有剩余字节,则返回-1。

但是,由于您正在使用的特定InputStream的实现细节,包含正在读取的字节的源可能会读取多个字节,以便告诉您下一个字节:

  1. 如果您的InputStream是缓冲的,那么整个缓冲区长度可能会被读入内存,只是为了告诉您下一个字节是什么。但是,后续调用read()可能不需要再次读取底层源,直到内存缓冲区耗尽为止。
  2. 如果您的InputStream正在读取压缩文件,那么底层源可能必须读入几个字节才能解压缩您的数据,以便返回下一个解压缩的字节。

  3. 包含其他输入流(例如new GZIPInputStream(new BufferedInputStream(new FileInputStream(file)));)的输入流层将使用上面的#1和#2,具体取决于图层。