2012-10-22 131 views
2

我一直試圖通過套接字連接使用PrintWriter/BufferedWriter發送多個屬性實例來發送和InputStreamReader讀取,所有發送和接收循環。通過streamreader讀取多個java屬性

發件人:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
for (int i = 0; i < vector.size(); i++) { 
    Properties mail = (Properties) vec.get(i); 
    mail.store(bw, line); 
    bw.newLine(); 
    bw.flush(); 
} 

接收機:

ireader = new InputStreamReader(socket.getInputStream()); 
Properties[] mails=new Properties[c]; 
for (int i = 0; i < c; i++) { 
    Properties p;// = new Properties(); 
    mails[i] = new Properties(); 
    mails[i].load(ireader); 
} 

但我只收到的最後一個Properties對象以後,才整個循環與進行接收發送。這意味着接收器正在加載,直到socket最終關閉。文檔確實說,對於load(),底層的讀者在返回後保持打開狀態,但我想我已經錯過了解釋「何時」實際返回的部分。我怎樣才能讀一個流的多個屬性?

回答

0

讓我們假設你有2組屬性的實例:

答:

a=b 
c=d 

B:

e=f 
g=h 

如果發送這兩個屬性的情況下,究竟會在電線上傳送會成爲:

a=b 
c=d 
e=f 
g=h 

並且接收方沒有辦法知道這構成兩個不同的實例。它讀取所有屬性直到流結束,並將所有讀取的屬性存儲在單個對象中。

您需要找到另一個協議來發送這兩個對象。

+0

是的。我能夠實現的唯一方法是重新連接套接字。我習慣了蟒蛇的醬菜。我想我應該一直使用序列化。 – aksci