对象输入流可用()returns0
objectinputstream available() returns 0
我正在从事套接字编程和实现自定义请求响应协议。同样,我在 java 套接字 API.
中使用了 ObjectInputstream
和 ObjectOutputstream
我卡住的地方是检查数据(在我的例子中是对象)是否可以读取,为此我尝试使用 ObjectInputstream.available()
但它返回 0 即使数据可在直播中使用。
为什么会这样?
所以我想到了解决方案:使用异常并在无限运行循环中处理它们,所以即使发生异常(读取超时)它也会尝试重新读取。
我怀疑这样做是不是一个好习惯?或者如果您有任何其他解决方案建议。
while (true){
try {
request = rpcClient.getRequest();
System.out.println(request);
// use threads to handle request for faster response(make use of request IDs)
rpcClient.sendResponse("test response");
} catch (SocketException e)
{// thrown when connection reset
System.out.println("Connection reset : Server is down.....");
break;
} catch (IOException e){
// thrown when read time out
System.out.println("read time out: listening again");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
这不是一个好的做法,因为无限循环会耗尽您的 CPU 时间。
我不太明白你的说法
but it is returning 0 even if data is available on stream
因为事实并非如此。如果它returns 0,则没有可以从流中读取的数据。是什么让您如此确定确实有数据?
另外:我看不到调用 available()
的代码。你能编辑你的问题吗?
您一开始就不应该使用 available()
。禁用读取超时,这样你就可以让线程等待直到有东西要读取(或连接断开)。
不过,我不建议使用 ObjectStreams
进行网络通信。考虑到 header 信息和其他要传输的内容,它在大多数情况下不太适合。你最好设计自己的协议来使用并通过网络发送字节。
我正在从事套接字编程和实现自定义请求响应协议。同样,我在 java 套接字 API.
中使用了ObjectInputstream
和 ObjectOutputstream
我卡住的地方是检查数据(在我的例子中是对象)是否可以读取,为此我尝试使用 ObjectInputstream.available()
但它返回 0 即使数据可在直播中使用。
为什么会这样?
所以我想到了解决方案:使用异常并在无限运行循环中处理它们,所以即使发生异常(读取超时)它也会尝试重新读取。
我怀疑这样做是不是一个好习惯?或者如果您有任何其他解决方案建议。
while (true){
try {
request = rpcClient.getRequest();
System.out.println(request);
// use threads to handle request for faster response(make use of request IDs)
rpcClient.sendResponse("test response");
} catch (SocketException e)
{// thrown when connection reset
System.out.println("Connection reset : Server is down.....");
break;
} catch (IOException e){
// thrown when read time out
System.out.println("read time out: listening again");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
这不是一个好的做法,因为无限循环会耗尽您的 CPU 时间。
我不太明白你的说法
but it is returning 0 even if data is available on stream
因为事实并非如此。如果它returns 0,则没有可以从流中读取的数据。是什么让您如此确定确实有数据?
另外:我看不到调用 available()
的代码。你能编辑你的问题吗?
您一开始就不应该使用 available()
。禁用读取超时,这样你就可以让线程等待直到有东西要读取(或连接断开)。
不过,我不建议使用 ObjectStreams
进行网络通信。考虑到 header 信息和其他要传输的内容,它在大多数情况下不太适合。你最好设计自己的协议来使用并通过网络发送字节。