我正在嘗試使用此代碼從設備接收字符串: byte[] buf = new byte[4]; int read = inFromDevice.read(buf); Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Bytes read: {0}", read); int msgLength = ByteBuffer.wrap(buf).getInt(); Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Message length: {0}", msgLength); Reader r = new InputStreamReader(inFromDevice); char[] cb = new char[msgLength]; int actualCharsRead = r.read(cb); Logger.getLogger(Utill.class.getName() + " DEBUG_ERR01").log(Level.INFO, "Actual chars read: {0} char array length: {1}", new Object[]{actualCharsRead, cb.length}); String msgText = String.valueOf(cb, 0, cb.length); Logger.getLogger(Utill.class.getName() + "Messages Loggining recieve: ").log(Level.INFO, msgText); return msgText;從設備中和輸入流從接受的服務器插槽中獲取。代碼大部分時間都在工作并返回消息,但有時我收到的消息小于msgLength(根據協議是錯誤的)日志中的一個示例是Actual chars read: 1020 char array length: 1391我認為由于網絡問題或設備出現問題,問題是外部的,但我需要一些專家見解。Java中是否有任何已知問題可能導致這種情況?
1 回答
呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
將僅阻塞,直到它可以將一個字符讀入緩沖區或檢測到 EOF。不能保證緩沖區將被填滿。InputStreamReader
如果您的協議指示要發送的字符串的長度,則接收方需要循環,跟蹤剩余的字符數,直到全部被讀取。
添加回答
舉報
0/150
提交
取消
