簡體   English   中英

使用 InputStreamReader 從套接字接收 utf-8 字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM