2016-03-08 63 views
0

通信的兩個服務器之間:上的OutputStream阻塞寫operaion

服務器1通過當服務器1接收到的數據使用以下API

ObjectOutputStream oos = new ObjectOutputStream(servResp.getOutputStream()); 
oos.writeObject(dataObj) 

發送到服務器的請求2 服務器2上的流寫入響應作爲

InputStream res = connection.getInputStream(); 
if(res.available() > 0) { 
    ObjectInputStream ois = new ObjectInputStream(res); 
    Object object = ois.readObject(); 
    dataObj = (DataObject)object; 
} 

這裏,res.isavailable()返回零個字節,它會通過使用服務器2上阻塞讀來解決,但有什麼辦法HANDL e在服務器1上?

+2

服務器2沒有讀取您所提供的代碼..您的問題不清楚。但從根本上說,使用'available()'幾乎總是*錯誤。 –

+0

不要調用'available'。如果你知道一個對象將被髮送,只需調用'readObject'。這將阻止,直到數據到達。 – Thilo

+0

我的問題是當服務器2執行res.available()它應該返回流中的字節數。可能嗎? – mreaevnia

回答

0

任何實現的available()自由返回零,並沒有什麼在它返回流中的字節數的Javadoc:相反,有一個特定的拒絕它確實任何這樣的事情。你的接收器應該只是readObject()。發件人可以做的除了發送外,沒有其他的幫助。

+0

ObjectInputStream#可用的實現非常複雜,所以我猜如果有數據可用,它將返回0以外的值。但是,是的,你永遠不需要調用它。 – Thilo