我正在制作一个简单的套接字应用程序,通过TCP使用我的服务器进行连接。我需要阅读,有时2个字节的值,因此这一切都像:Java套接字 - 丢失字节和100%处理器功耗
public byte[] read(int bytes)
{
byte b[] = new byte[bytes];
try {
in.read(b); //in is InputStream from properly connected Socket.getInputStream()
return b;
} catch (IOException e) {
return null;
}
}
这个功能应该receieve字节的给定数量和排列返回。问题是,有时在休息可用之前它读取一个字节并返回奇怪的数据。
byte a[]=read(2); //Program is blocked here untill some bytes arrive...
System.out.prntln(a[0]); //always correct
System.out.prntln(a[1]); //unprintable character (probably 0 or -1)
我速战速决是添加while循环检查是否有足够的数据来读:
public byte[] read(int bytes)
{
byte b[] = new byte[bytes];
try {
while (in.available()<bytes); //It does the thing
in.read(b);
return b;
} catch (IOException e) {
return null;
}
}
但是,循环使用的处理器功率的100%(其中,核心,实际上),这是很烦人。有没有什么方法可以重写这个函数(参数和返回值必须完全一样)才能正常工作?
提前感谢名单:)
我为什么要在这里做这件事,并且这会做这份工作?终于{}和我的问题之间我找不到任何真正的,我错了吗? –
这是一个评论btw你必须关闭你的资源,当你打开例如InputStreams – nachokk
我关闭他们,当我不需要这些InputStreams了。这只是一个帮手功能。另外,套接字是否自动关闭流? –