【问题标题】:How to convert byte[] to int in Java如何在 Java 中将 byte[] 转换为 int
【发布时间】:2013-07-06 06:15:33
【问题描述】:

我有一个基于套接字的服务器-客户端通信通道。我将 3 个整数值打包到 byte[] 并将其写入套接字 OutputStream,但我如何将其转换回来?

代码简单:

    ByteBuffer b = ByteBuffer.allocate(12);
    b.putInt(BTActions.READY_FOR_GAME);
    b.putInt(i);
    b.putInt(l);

    try
    {
        mAcceptThread.getWriteSocket().write(b.array());
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

【问题讨论】:

  • “转换回来”是什么意思?
  • 像读取12个字节,用ByteBuffer包裹起来,做三个getInt()。
  • 好的,请看下面的答案。
  • 看看这个similar question,它可能对你有帮助。
  • 抱歉,@fge 在这件事上是正确的。不过谢谢!话题结束。

标签: java android sockets


【解决方案1】:

如果你使用ByteBuffer,这个缓冲区有一个字节顺序;而且这个顺序默认是大端的。

您分配了一个 12 字节的缓冲区并向其中写入 3 个整数;那是 12 个字节,到目前为止还不错。

鉴于您没有为 ByteBuffer 定义顺序,默认为大端。而大端是 JVM 默认用于所有原始类型的。

因此,在将 3 个整数写入缓冲区后,您可以将它们读回:

final int i1, i2, i3;
buffer.rewind();
i1 = buffer.getInt();
i2 = buffer.getInt();
i3 = buffer.getInt();

【讨论】:

  • 所以如果我输入 3 个 int 值,例如 5、8、7,我必须倒回缓冲区才能以相反的顺序获取这个值或整数?
  • 当您将.put*() 更改为ByteBuffer 时,您更改了缓冲区的偏移量(如果您查看javadoc,这是相对的put 操作)。也有绝对 put 操作,但是对于 int 上的 ByteBuffer 没有这样的操作。最坏的情况是,如果你想重新阅读,你可以随时 final ByteBuffer newbuf = ByteBuffer.wrap(oldbuf.array()); 并回读
猜你喜欢
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2014-05-04
  • 2010-11-08
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多