2013-07-08 107 views
0

客戶端和服務器通過TCP相互通信。服務器和客戶端互相發送UTF-8編碼的消息。UTF8編碼和網絡流

編碼UTF-8時,每個字符的字節數是可變的。它可能需要一個或多個字節來表示單個字符。

假設我正在讀取網絡流上的UTF-8編碼消息,這是一條巨大的消息。在我的情況下,它大約是145k字節。要創建這個大小的緩衝區以便從網絡流中讀取,可能會導致出現OutMemoryException,因爲字節數組需要大量的順序存儲器。

最好在while循環中從網絡流中讀取數據,直到讀取完整的消息爲止,將這些數據讀入較小的緩衝區(可能是4kb),然後解碼字符串並連接。

我想知道的是當讀緩衝區的最後一個字節實際上是由多個字節表示的一個字符的字節之一時會發生什麼。當我解碼讀取緩衝區時,最後一個字節和下一個讀取的開始字節將是無效的或錯誤的字符。在我腦海中解決這個問題的最快方法是使用非變量編碼(如UTF-16)進行編碼,然後使緩衝區成爲每個字符中字節數的倍數(使用UTF-16作爲緩衝區功率2,UTF-32的功率4)。

但UTF-8似乎是一種常見的編碼,這將使我相信這是一個解決的問題。除了改變編碼之外,還有其他解決我的問題的方法嗎?也許使用鏈表類型對象來存儲字節將是處理這個問題的方法,因爲它不會使用順序存儲器。

回答