网络字节顺序到java中的主机字节顺序

时间:2012-07-17 11:46:38

标签: java io byte socket.io

我很难解释从C服务器到我的java应用程序的响应。希望C服务器以BIG_ENDIAN格式响应我的java,我的问题是如何将响应转换为Integer。我正在粘贴我从C服务器得到的响应,并想知道如何在java中执行“be64toh”功能。

来自C服务器的响应 -

  

^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ H ^ @ ^ @ ^ @ ^ @ ^ @ ^ A ^ A ^ B ^ @ ^ @ ^ @ ^ N ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ H ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ A ^ @ ^ @ ^ @ ^ K ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @< 80> ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ BA ^ @ ^ @ ^ @ ^ AYour   请求已成功注册,我们已经注册   处理。^ @ ^ @ ^ @ ^ @ ^ d ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @¨ýf^ @ ^ @ ^ @ ^ @ ^ @ MX @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ N ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ 1 H

我不确定如何解释不可读的字节,当转换为十六进制时,大多数都是null但很少有像^H ^A那样填充数据等等。你能帮我找到解决方案。

1 个答案:

答案 0 :(得分:4)

假设您要读取java.nio.SocketChannel,可以使用ByteBuffer进行转换:

private static final int BUFFER_SIZE = 1024;

ByteBuffer readBuffer = ByteBuffer.allocate(BUFFER_SIZE).order(ByteOrder.BIG_ENDIAN);
int bytesRead = socketChannel.read(readBuffer);
readBuffer.flip();

现在您可以从缓冲区中读取数据,例如:

int someInt = readBuffer.getInt();
long someLong = readBuffer.getLong();