环境:运行程序时使用的输入文件重定向,IDE:Eclipse。
我正在从System.in读取数据包(因为使用了输入重定向),并计算数据包的数量。每次运行相同输入的程序时,我得到不同的计数(全部错误)。另外,当我在控制台上显示很多东西时,我得到了正确的计数。
int packetNumber = 0;
while(System.in.available()>0)
{
System.out.println("\n" + packetNumber + ": ");
int numberOfBytes = System.in.read();
byte[] buffer = new byte[numberOfBytes];
System.in.read(buffer, 0, numberOfBytes);
packetNumber++;
}
System.out.println("Number of packets = " + packetNumber);
使用System.out.println()可以正常工作,但没有它会表现得很奇怪
提前致谢。
答案 0 :(得分:0)
read(byte[] b, int off, int len)
:
将输入流中最多
len
个字节的数据读入一个字节数组。尝试读取len
个字节,,但可以读取较小的数字。实际读取的字节数以整数形式返回。
这是因为缓冲,以及程序发送数据和本程序接收数据的性能差异,这会影响下次调用read()
时缓冲区中累积的字节数。
假设每次调用read()
都会返回一个“数据包”,这肯定是错误的。
如果您将返回值捕获为bytesRead
并将其相加,则应始终获得相同的总数。
byte[] buffer = new byte[numberOfBytes];
int totalBytes = 0;
int bytesRead;
while ((bytesRead = System.in.read(buffer)) != -1) {
totalBytes += bytesRead;
}
System.out.println("Received " + totalBytes + " bytes");