我有一個TCP套接字客戶端從服務器接收消息(數據)。消息的類型爲長度(2字節)+數據(長度字節),由STX & ETX字符分隔。java BufferedReader的具體長度返回NUL字符
我正在使用bufferedReader檢索兩個第一個字節,解碼長度,然後再從相同的bufferedReader中讀取相應的長度並將結果放入char數組中。當我試圖從閱讀器讀取(長度)字節時,我只得到它的一部分,我的數組的其餘部分充滿「NUL」字符。我想這是因爲緩衝區尚未填滿。
char[] bufLen = new char[2];
_bufferedReader.read(bufLen);
int len = decodeLength(bufLen);
char[] _rawMsg = new char[len];
_bufferedReader.read(_rawMsg);
return _rawMsg;
我在幾個迭代的方式解決了這個問題:
首先我測試了我的數組的最後一個字符:如果不是ETX我會從BufferedReader中一個接一個,直到讀取字符我會到達ETX,然後重新開始我的日常工作。 的後果是,我基本上會丟棄一條消息。
然後,爲了仍然檢索該消息,我會在我的「截短」消息中發現NUL字符的第一次出現,讀取&一次存儲一個附加字符,直到我到達ETX,並將它們附加到我的「截斷」消息,確認長度是好的。
它的工作原理還可以,但我真的想有什麼東西我可以做的更好,就像如果在緩衝區中的字符總數,我需要提供閱讀它之前檢查,但無法找到合適的方式去做...
任何想法/指針?
謝謝!