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