为了账号安全,请及时绑定邮箱和手机立即绑定

从套接字使用输入流读取器接收 utf-8 字符串?

从套接字使用输入流读取器接收 utf-8 字符串?

鸿蒙传说 2022-09-28 10:28:26
我正在尝试使用此代码从设备接收字符串:        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

如果您的协议指示要发送的字符串的长度,则接收方需要循环,跟踪剩余的字符数,直到全部被读取。


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号