inputstream.read在java中读取多少数据

inputstream.read在java中读取多少数据,java,inputstream,Java,Inputstream,我正在查看inputstream对象的read方法的定义,我对每次读取多少数据感到困惑,因为它说“读取一些字节” 假设我有一个大小为200的缓冲区数组,inputstream中的数据是100字节。是否保证inputStream.read获得所有100个字节?虽然从inputStream和具体实现(请参阅抛出IOException部分)读取时不保证任何内容,但是,是的,如果您有一个大小大于读取数据的缓冲区,则所有数据都应读入缓冲区,缓冲区中剩余的字节s将不会被写入,因此将保持默认的原始值0 当从I

我正在查看inputstream对象的read方法的定义,我对每次读取多少数据感到困惑,因为它说“读取一些字节”

假设我有一个大小为200的缓冲区数组,inputstream中的数据是100字节。是否保证inputStream.read获得所有100个字节?

虽然从
inputStream和具体实现(请参阅
抛出IOException
部分)读取时不保证任何内容,但是,是的,如果您有一个大小大于读取数据的缓冲区,则所有数据都应读入缓冲区,缓冲区中剩余的
字节
s将不会被写入,因此将保持默认的原始值
0

当从
InputStream
传输到
OutputStream
时,这也是一个警告

read
方法返回流结束时
字节的读取数或
-1

这将指示为“精确拷贝”需要写入多少缓冲区

医生

虽然从
输入流和具体实现(参见
抛出IOException
部分)读取数据时没有任何保证,但是,如果您有一个大小大于读取数据的缓冲区,则所有数据都应该读入缓冲区,缓冲区中剩余的
字节将不会被写入,因此,保持默认原语值
0

当从
InputStream
传输到
OutputStream
时,这也是一个警告

read
方法返回流结束时
字节的读取数或
-1

这将指示为“精确拷贝”需要写入多少缓冲区


医生

是一个抽象类(不是“对象”)。因此,它只指定一个接口,而不是一个实现,因此实现细节取决于您使用的实际非抽象子类。

是一个抽象类(而不是“对象”)。因此,它只指定一个接口,而不是一个实现,因此实现细节取决于您使用的实际非抽象子类。

此接口的全部要点(或者准确地说:抽象类):您可以绝对不依赖于假定读取了多少字节。您必须检查该方法的返回值才能知道

背景:此接口有许多不同的实现。有些是我的缓冲区,有些可能不是。一些读取“固定”输入(可能来自内存中的现有数据)。有人可能会决定给你一个转向互联网的流,下载一个10GB的文件,然后开始一个字节接一个字节地发送给你

您只知道:该方法返回

读入缓冲区的总字节数


故事结束。

此接口的全部要点(或者准确地说:抽象类):您可以绝对不依赖于假定读取了多少字节。您必须检查该方法的返回值才能知道

背景:此接口有许多不同的实现。有些是我的缓冲区,有些可能不是。一些读取“固定”输入(可能来自内存中的现有数据)。有人可能会决定给你一个转向互联网的流,下载一个10GB的文件,然后开始一个字节接一个字节地发送给你

您只知道:该方法返回

读入缓冲区的总字节数


故事结束。

不,没有担保
read(byte b[])
只需委托给
read
方法,该方法采用如下三个参数:

该方法的文件如下:

从输入流中读取最多为len字节的数据到数组中 字节数。尝试读取多达len字节,但a 可以读取较小的数字。实际读取的字节数为 以整数形式返回。


不,没有担保
read(byte b[])
只需委托给
read
方法,该方法采用如下三个参数:

该方法的文件如下:

从输入流中读取最多为len字节的数据到数组中 字节数。尝试读取多达len字节,但a 可以读取较小的数字。实际读取的字节数为 以整数形式返回。


是的,17年前我错了。我让代码从套接字读取数据。首先要读取的是一个4字节的头。你知道,它只有4个字节。究竟为什么它返回的字节数要少于4个。我假设我总是得到4个字节。但在0.1%的情况下,我只得到了2或3个字节。我花了4个星期的调试和疯狂才找到那个bug。是的,17年前我错了。我让代码从套接字读取数据。首先要读取的是一个4字节的头。你知道,它只有4个字节。究竟为什么它返回的字节数要少于4个。我假设我总是得到4个字节。但在0.1%的情况下,我只得到了2或3个字节。我花了4个星期的调试和疯狂才找到那个bug。我很欣赏它的快速恢复;-)我很欣赏你的迅速复出;-)
public int read(byte[] b)
         throws IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.
return read(b, 0, b.length);