0
我试图创建一个16位值的数组通过网络顺序套接字发送。使用OutputStreamWriter写入二进制字符数组
首先,我已经定义一个数组来保存该值:
char[] txbuf = new char[32]; // Java "char" is 16-bits
接着,我打开套接字并创建使用OutputStreamWriter:
InetAddress serverAddr = InetAddress.getByName(host);
socket = new Socket(serverAddr, port);
writer = new OutputStreamWriter(socket.getOutputStream(),Charset.forName("UTF-16BE"));
然后我初始化要发送的数据:
txbuf[0] = 0x1234;
...
txbuf[31] = 0xFFFF;
最后,我发送数据到插座:
writer.write(txbuf,0,32);
write.flush();
但是,我发送数据的设备行为不正常,我怀疑UTF-16BE转换实际上对数据做了些什么(过滤字符?),除了简单的网络命令外还有一些问题翻译。一切工作正常在C,但不是在Java端口。
我已经看到了各种复杂的方案试图写入原始二进制数据,但试图看起来像最简单和最直接的方法。
上述方案有问题吗?
是否正在编写代理人的任何字符?你看过正在发送的实际数据吗? – 2014-09-23 22:57:02
@DavidConrad数据可以是任何随机二进制值。 – Michael 2014-09-23 23:04:22
@DavidConrad如果我明白你在说什么,如果任何值在代理范围(0xD800..0xDBFF/0xDC00..0xDFFF),那么一些翻译将会发生? – Michael 2014-09-23 23:08:16