2012-09-05 45 views
0

想知道一個能做到這樣的成功的東西:Java:可能有多種類型的流?

Socket s = new Socket("", 1234); 
BufferedInputStream in = new BufferedInputStream(s.getInputStream()); 
BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream()); 
ObjectInputStream oin = new ObjectInputStream(s.getInputStream()); 
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); 

或者,如果有也許做的更好的方法。我問,因爲我想通過緩衝I/O流發送原始數據,並使用對象流作爲通信細節和爲我的程序建立連接的協議。現在我試圖只使用緩衝流,並使用byte陣列用於我的客戶端/服務器協議,但是我遇到了打嗝的地方,我收到的byte陣列與我期望的陣列不相等,因此==運算符和.equals()方法不適合我。

+0

你試過了嗎?你有什麼問題嗎? – kosa

+0

@Nambari我以前在一個不同的項目上嘗試過這種方法,但效果不好。在我走之前我來這裏問是否有這些情況下的最佳做法,並搞砸了我的項目。 – Logan

回答

3

你不能使用混合的流,因爲它們都被緩衝,所以你會得到腐敗和混亂。

只需使用ObjectStreams即可。

一般而言,您只應讀取或寫入一個Stream,Reader或Writer以獲取流。

+0

這就是我想知道的。在這種情況下,是否可以通過ObjectStream流式傳輸從文件中讀取的數據?我看到它有一個'write(byte [])'方法,它的工作方式與BufferedStreams相同嗎? – Logan

+0

您可以使用ObjectStream的所有方法,只需確保您讀取了您寫入的對象,並且您讀取了與寫入的數據相同的數據(字節[])即可。如果你把這些混在一起,你們都會腐敗。您可以發送像writeInt(長度)這樣的標誌,並且如果長度是負數,它就是一個Object。 –