[英]Receiving a utf-8 string using InputStreamReader from a Socket?
我正在嘗試使用以下代碼從設備接收字符串:
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;
inFromDevice 是從接受的 ServerSocket 獲取的 InputStream。
該代碼大部分時間都在工作並返回消息,但有時我收到的消息小於 msgLength (根據協議這是錯誤的)
日志中的一個示例是Actual chars read: 1020 char array length: 1391
我認為問題是由於網絡問題或設備出現問題而導致的外部問題,但我需要對此有一些專家見解。 Java 中是否有任何已知問題可能導致這種情況?
InputStreamReader
只會阻塞,直到它可以將一個字符讀入緩沖區或檢測到 EOF。 不能保證緩沖區會被填滿。
如果您的協議指示要發送的字符串的長度,則接收器需要循環,跟蹤剩余的字符數,直到所有字符都被讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.