我正在运行Java Socket客户端。如果你第一次或第一次运行它,它的工作原理。但是,经过半天的调试,DataInputStream读取TCP套接字的readByte()方法将抛出java.io.EOFException。如果我重新启动Eclipse,或者单独运行相同的java代码,则完全没问题。我想,它与Eclipse运行/调试Java代码的方式有关。不知何故,每次调试程序时都会使用一些资源,之后不会释放。有人知道吗?
这是代码
//DataInputStream is set outside of the scope.
DataInputStream dataInputStream;
StringBuffer stringBuffer = new StringBuffer();
while(true)
{
// java.io.EOFException is thrown at the line below.
byte c = dataInputStream.readByte();
if( c == 0) {
break;
}
stringBuffer.append( (char)c);
}
答案 0 :(得分:-1)
一般情况下,break
中while(true)
(或者首先只有while(true)
循环)不是一个好习惯。仅仅因为字节== 0并不意味着你已经到达数据流的末尾。您应该检查是否有更多数据可以从流中读取,而不是假设读取空字节(Java中为0)(使用available()
之类的东西)。一个简单的修复可能看起来像这样:
DataInputStream dataInputStream;
StringBuffer stringBuffer = new StringBuffer();
while(dataInputStream.available() > 0)
{
byte c = dataInputStream.readByte();
stringBuffer.append( (char)c);
}
这应该继续将字符附加到StringBuffer,并在达到EoF时停止。