我在java项目中使用TCP Socket。我试图从一些设备接收数据。当设备从0x80发送数据到0x9f时,数据被破坏。例如,如果设备发送0x86(十进制134)我得到0x2020(十进制8224)。请在下面找到示例代码
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
int res = in.read() ;
如果有人遇到此类问题,请告诉我。 任何帮助都非常感谢。
AJ
答案 0 :(得分:2)
您正在使用InputStreamReader
,而Writer
又使用您平台的默认字符编码,因为您尚未指定编码。 不要那样做。
您是否真的尝试发送和接收文字?如果是这样,请在两侧明确使用相同的编码(并确保它是覆盖您要传输的所有文本的编码 - UTF-8通常是一个不错的选择)。如果没有,请不要使用Reader
/ {{1}}对 - 它们用于文本数据。
答案 1 :(得分:2)
InputStreamReader正在读取字节并将它们转换为字符(通常使用UTF-8,除非您另行指定)。 UTF-8表示值大于127的字节是多字节字符的一部分,因此它们可以与下一个字节组合,并为您提供一个奇怪的字符代码。其他编码可以做类似古怪的事情,假设你的字节代表编码字符集中定义的字符。
修复:如果您正在读取字节,则读取字节(通过InputStream)。如果您正在阅读字符,请阅读字符(通过阅读器)。永远不要混淆两者。