从Eclipse

时间:2016-04-08 07:21:10

标签: java eclipse sockets eof

我正在运行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);
}

1 个答案:

答案 0 :(得分:-1)

一般情况下,breakwhile(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时停止。