[英]Reading 4 bytes from InputStreamReader
我有一個問題。 我正在Java中的一個簡單的多線程TCP服務器上工作,目前有這個問題:
客戶可以向我發送輸入字符串,例如
[IDENTIFIER]文字\\ r \\ n
沒關系,我已經完成了。 除一種情況外,每個輸入查詢都必須以\\ r \\ n結尾。
這種情況是客戶端將圖像作為二進制數據發送時。 該消息具有以下結構:
照片[空間] [數據長度] [空間] [數據] [BIG ENDIAN中的校驗和的4個字節]
關鍵是要返回一個
202 OKAY \\ r \\ n
當校驗和與數據中的位總和匹配時顯示的消息,或者...
302錯誤的支票\\ r \\ n
... 除此以外。 但是,讀取4個字節時遇到一些嚴重問題。 輸入源是InputStreamReader的實例,該實例從以下來源獲取:
in = new InputStreamReader(this.clientSocket.getInputStream());
函數InputStreamReader.read()返回一個剛剛讀取的char的int值。 現在,我試圖
correctChecksumBytes = new byte[4];
for( int i = 0 ; i < 4 ; ++i ) {
correctChecksumBytes[i] = (byte) in.read();
}
if (correctChecksumBytes == null) {
throw new BadSyntax();
}
bb = ByteBuffer.wrap(correctChecksumBytes);
bb.order(ByteOrder.BIG_ENDIAN);
fourByteCheck = bb.getInt();
但是,我現在明白,強制轉換in.read()返回的int是錯誤的,因為結果相差很大。 我被認為是ByteBuffer的用法是正確的,我只是不知道如何用正確的值填充字節數組。
我也嘗試將InputSreamReader轉換為字節數組,但是我發現這不是有效的方法,因為出現一條消息...
照片[空格] [數據長度] [空格] [數據] [BIG ENDIAN中的校驗和的4個字節] [IDENTIFIER]文字\\ r \\ n
...有效,需要解釋為2條消息。
我做了一些測試,發現我成功地讀取了所有數據並計算了有效的校驗和,因此輸入中的下4個字節是校驗和的4個字節,但我還沒有設法讀取。
另外,這是有效的PHOTO消息的示例
照片8 ABCDEFGH \\ x00 \\ x00 \\ x02 \\ x24
因此,我想問一下,如何讀取這4個字節並將其轉換為int以與計算的校驗和進行比較?
非常感謝
InputStreamReader將讀取基於字符的數據。 您必須編寫自定義InputStream並從中讀取x字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.