[英]How to check ObjectInputStream is empty in Java?
我試圖通過 sockets 實現一個基本的聊天應用程序,但我對 ObjectInputStream 有問題。 我在 while(true) 循環中使用了兩種寫讀方法,當沒有任何東西可以讀取並無限等待它時,編譯過程卡住了。 因此,我需要在閱讀之前檢查它是否為空。
這是我的代碼。
服務器:
Socket socket = server.accept();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject("Server connected!");
oos.flush();
String message = (String) ois.readObject();
System.out.println(ois.available());
txtChat.setText(message);
while(true) {
if(sendMessage) {
oos.writeObject(txtMessage.getText());
oos.flush();
sendMessage = false;
}
while(!sendMessage) {
message = (String) ois.readObject();
txtChat.setText(txtChat.getText()+"\n"+"Client: "+message);
}
Thread.sleep(100);
}
客戶:
socket = new Socket(host.getHostName(), 9876);
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
oos.flush();
String message = (String) ois.readObject();
txtChat.setText(message);
while(true) {
message = (String) ois.readObject();
txtChat.setText(txtChat.getText()+"\n"+"Server: "+message);
if(sendMessage) {
oos.writeObject(txtMessage.getText());
oos.flush();
sendMessage = false;
}
Thread.sleep(100);
}
stream 關閉或打開。
輸入 stream 不知道它已關閉,直到您從中讀取內容。 這正是 stream 上不存在這種isClosed()
方法的原因。
您可以將 stream 中的字節讀取到 object 中。 充其量您將能夠構建 object。 否則,您應該處理 IO 異常並做出相應決定。
或者,您可以檢查在不阻塞的情況下可以讀取多少字節。 如果為 0,則您正在查看等待輸入的空 stream。
inputStream.available() != 0 //handle exception
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.