簡體   English   中英

BlackBerry UTF-8 InputStreamReader出現套接字問題

[英]BlackBerry UTF-8 InputStreamReader on Socket issue

我正在嘗試使用套接字從服務器讀取響應,並且該信息是UTF-8編碼的。 我將來自套接字的InputStream包裝在InputStreamReader中,並將編碼設置為“ UTF-8”。

由於某種原因,似乎只讀取了部分響應,然后讀取僅掛起一兩分鍾,然后結束。 如果將InputStreamReader上的編碼設置為“ ISO-8859-1”,則可以立即讀取所有數據,但顯然並非所有字符都可以正確顯示。

代碼如下所示

socketConn = (SocketConnection)Connector.open(url);
InputStreamReader is = new InputStreamReader(socketConn.openInputStream(), "UTF-8");

然后我通讀標題和內容。 內容被分塊,我讀取了每個塊的大小(從十六進制轉換為十進制)的行,以了解要讀取的內容。

我不了解兩種編碼在讀取上的區別及其可能產生的效果,因為它與ISO-8859-1毫無問題,並且最終與UTF-8兼容,只是延遲很長。

很難找到延遲的原因。

您可以嘗試另一種從網絡獲取數據的方法:

byte[] data = IOUtilities.streamToBytes(socketConn.openInputStream());

我相信以上內容應立即通過。 然后從網絡獲取字節,就可以開始數據處理。 請注意,您始終可以從以UTF-8編碼表示字符串的字節中獲取String

String stringInUTF8 = new String(bytes, "UTF-8");

更新 :請參閱此帖子的第二條評論。

我已經在動態刪除數據塊大小,因此最終做了一些類似於IOUtilities答案的操作。 我沒有使用InputStreamReader,而是使用了InputStream。 InputStream具有可以填充字節數組的read方法,因此對於每個塊,代碼看起來都像這樣

byte[] buf = new buf[size];
is.read(buf);
return new String(buf, "UTF-8");

這似乎可行,不會造成任何延遲,我可以即時刪除有關塊的額外信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM