这是一个有点晦涩的问题,似乎只在我使用某些计算机时才会发生。我今天在我们学校的 XP 计算机上遇到了这个问题,我似乎无法在我的家用计算机 (W7) 上复制它。
无论如何,每当我使用此代码(其中:)时,在 Java 中读取/写入套接字往往会出现问题int avail, InputStream socket, byte[] buffer, String output
:
while( (avail = input.available()) > 0 )
{
read = input.read( buffer );
output += new String( buffer, 0, read );
}
这似乎是有道理的(读取所有数据,直到没有数据可用于临时缓冲区,然后是字符串),但在我们学校的计算机上(使用 IE7 测试它),整个事情不知何故暂停了。我在想 input.available() 导致它以某种方式阻塞,因为线程只是继续运行而没有到达端点......实际上只是在某处暂停。
哦,我忘了提一下:每当我在调试模式下运行它并逐步执行每一行时,它完全像它应该的那样工作......这让我更加困惑。
当我回到家复制这个问题时,它工作得很好(只使用 Firefox 和 IE8)。我不知道有什么更好的选择。
PS:如果缓冲区足够大,我只是使用:
read = input.read( buffer );
output += new String( buffer, 0, read );
它工作得很好,但总是担心发送的数据会超过缓冲区大小。