我從發送一個UTF8字符串從一個c套接字到java套接字有一些麻煩。 下面的方法正常工作:DataInputStream和readLine()與UTF8
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF8"));
main.title = in.readLine();
但後來我需要一個int java.io.InputStream.read(byte[] b, int offset, int length)
方法,該方法不適合一個BufferedReader存在。於是我試圖採取一個DataInputStream
DataInputStream in2 = new DataInputStream(socket.getInputStream());
,但一切都記載只是垃圾。
然後我試圖使用DataInputStream
的readLine()
方法,但是這並沒有給我正確的UTF8字符串。
你看到我的困境。我不能爲一個InputStream使用兩個閱讀器嗎?或者我可以轉換DataInputStream.readLine()
結果並將其轉換爲UTF8?
感謝, 馬丁
我是否正確地理解您正在同一個「對話」中同時發送文本和二進制數據?爲相同的輸入流創建兩個閱讀器應該沒有問題。問題是知道何時(以及多少)閱讀哪個閱讀器。由於您有混合類型的數據,因此它們在您讀取基礎數據流時都會消耗(並提前)底層數據流。你可以只讀字節流,然後在代碼中明確地轉換字節(new String(bytes,「UTF-8」)等)。或者你可以將你的通信分成兩個不同的套接字。 – pap 2011-06-16 11:11:40
@pap:這是非常值得的答案;-) – 2011-06-16 11:19:08
@pap:我同意,發表評論作爲答案:) – helios 2011-06-16 11:50:23