我正在制作一个简单的套接字应用程序,它使用 TCP 与我的服务器连接。我有时需要读取 2 个字节的值,所以这一切都是这样的:
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;
}
}
此函数应接收给定的字节数并将其以数组形式返回。问题是,有时它会在剩余可用之前读取一个字节并返回奇怪的数据。
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% 的处理器功率(实际上是一个内核),这非常烦人。有什么方法可以重写该函数(参数和返回值必须完全相同)以使其正常工作?
提前谢谢:)