Java 使用读取和读取(bytearray)的InputStream

Java 使用读取和读取(bytearray)的InputStream,java,inputstream,Java,Inputstream,为什么read()方法在读取字节总数方面有所不同? 比如说, int n = System.in.read(); System.out.println("The total bytes are:"+System.in.available()); 在我们使用的另一个地方 byte [] in= new byte[30]; int n = System.in.read(byte); System.out.println("The total bytes are:"+System.in.avail

为什么read()方法在读取字节总数方面有所不同? 比如说,

int n = System.in.read();
System.out.println("The total bytes are:"+System.in.available());
在我们使用的另一个地方

byte [] in= new byte[30]; 
int n = System.in.read(byte);
System.out.println("The total bytes are:"+System.in.available());
两种方法都使用了Java一词

第一种方法的输出为:

the total bytes are 5
其中第二种方法是:

 the total bytes are 6
这两种方法在返回字节方面有什么不同?

System.in.read()
它从标准输入流读取值

byte [] in= new byte[30]; 
int n = System.in.read(byte); 
  • 它从数组中读取值

正如Javadoc对available()方法所说的那样,它:“返回一个估计值,该值是在下次调用该输入流的方法时,可以从该输入流读取(或跳过)的字节数,而不会阻塞该输入流。”


流确定此计数的确切方式没有严格定义。在System.In的情况下,它可以使用其内部缓冲区中当前可用的字节数,或者它可以将调用委托给可能依赖于实现的底层输入流(例如,通过操作系统)。从返回的值中,您可以真正确定的唯一一件事是您应该能够安全地读取而不阻塞的字节数。

atish,您的注释是正确的,但是为什么第一个返回5字节,而另一个返回6字节。我知道第一次打印输出是5个字节,因为它需要CR,但是返回6个字节的读取(字节)又如何呢?两个都不返回读取的字节数-该方法返回仍然可以读取的最小字节数。@BarrySW19 read()方法返回它读取的字节数。available()方法返回可以在不阻塞的情况下读取的字节数。它们都不返回“仍然可以读取的最小字节数”。我不知道为什么您会看到“可以不阻塞地读取的字节数”和“仍然可以读取的最小字节数”之间的差异。他们的意思显然是一样的。BarrySW19,非常感谢你的评论,我也读过Javadoc。实际上,问题与来自内部缓冲区的大量数据有关。使用这两种方法在很多情况下都会造成混淆。@MehdiAcademic2014实际上您只是猜测“来自内部缓冲区的巨大数据”的存在,更不用说它对这个问题的影响了(如果有的话)。您的第二个代码段没有编译,编辑您的问题在不阻止System.in的情况下可读取的字节数完全取决于您提前键入的长度。