首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用InputStreamReader从套接字接收utf-8字符串?

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

Stack Overflow用户
提问于 2019-04-10 03:29:42
回答 1查看 72关注 0票数 -2

我正在尝试使用以下代码从设备接收字符串:

代码语言:javascript
复制
        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中有没有什么已知的问题可能会导致这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 04:01:01

InputStreamReader只会阻塞,直到它可以将一个字符读入缓冲区,或者检测到EOF为止。不能保证缓冲区会被填满。

如果您的协议指示正在发送的字符串的长度,则接收方需要循环,跟踪剩余的字符数,直到所有字符都被读取为止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55599976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档