Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测DataInputStream字节结束不工作(Java)_Java - Fatal编程技术网

检测DataInputStream字节结束不工作(Java)

检测DataInputStream字节结束不工作(Java),java,Java,我正在使用类DataInputStream从套接字读取数据。我必须使用readByte(不是readLine),因为输入不一定是字符串格式。问题是我必须等待流的末尾调用函数,但我无法检测到它 守则: reader = new DataInputStream(socket.getInputStream()); byte dt; String cmd = ""; while( (dt = reader.readByte()) >= 0){ cmd += (ch

我正在使用类
DataInputStream
从套接字读取数据。我必须使用readByte(不是readLine),因为输入不一定是字符串格式。问题是我必须等待流的末尾调用函数,但我无法检测到它

守则:

reader = new DataInputStream(socket.getInputStream());
byte dt;            

String cmd = "";
while( (dt = reader.readByte()) >= 0){
    cmd += (char)dt;

    if( /* end of the stream reached */ ){ 
        processInput(cmd);
    }  
}
System.out.println("End of the loop");
问题是我不知道如何写这个
if
。而且,当流结束时,没有到达循环的结尾,证明这一点的是短语“循环的结尾”从未被打印,因此它只是被卡在循环上

抛出:
EOFEException-如果此输入流已到达末尾

所以,为了查看文件的结尾,必须使用
try
/
catch

try {
    while(true){
        cmd += (char) reader.readByte();
    }
} catch (EOFException e) {
    // handle EOF
}

/* end of the stream reached */
processInput(cmd);

System.out.println("End of the loop");

另一种方法是使用其中一个函数,当到达文件末尾时返回
-1
,例如

int dt;
while ((dt = reader.read()) >= 0) {
// ...
}
使用另一个
read(…)
函数可能更有效,因为它们返回的缓冲区充满了输入。

这在

抛出:
EOFEException-如果此输入流已到达末尾

所以,为了查看文件的结尾,必须使用
try
/
catch

try {
    while(true){
        cmd += (char) reader.readByte();
    }
} catch (EOFException e) {
    // handle EOF
}

/* end of the stream reached */
processInput(cmd);

System.out.println("End of the loop");

另一种方法是使用其中一个函数,当到达文件末尾时返回
-1
,例如

int dt;
while ((dt = reader.read()) >= 0) {
// ...
}

使用另一个
read(…)
函数可能更有效,因为它们返回的缓冲区充满了输入。

应该是这样。你确定插座的另一端是闭合的吗?它应该是闭合的。您确定插座的另一端已关闭吗?