Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将字节[]转换为int_Java_Android_Sockets - Fatal编程技术网

如何在Java中将字节[]转换为int

如何在Java中将字节[]转换为int,java,android,sockets,Java,Android,Sockets,我有一个基于套接字的服务器-客户端通信通道。我将3个整数值压缩到字节[],并将其写入socket OutputStream,但我知道如何将其转换回来 代码类型: ByteBuffer b = ByteBuffer.allocate(12); b.putInt(BTActions.READY_FOR_GAME); b.putInt(i); b.putInt(l); try { mAcceptThread.getWriteSocket

我有一个基于套接字的服务器-客户端通信通道。我将3个整数值压缩到字节[],并将其写入socket 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();
    }

如果使用
字节缓冲区
,则此缓冲区具有字节顺序;默认情况下,这个顺序是big-endian

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

假设您没有定义ByteBuffer的顺序,默认值是big-endian。默认情况下,JVM对所有基元类型都使用big-endian

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

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

“转换回”是什么意思?就像读取12个字节一样,用ByteBuffer将其包装并执行三个getInt()。好的,请参阅下面的答案。看看这个,它可能会对您有所帮助。抱歉,但@fge在这件事上是正确的。不过谢谢!主题结束。因此,如果我输入3个int值,比如5、8、7,我必须倒带缓冲区,以获得相反顺序的一个或多个整数?当您
.put*()
ByteBuffer
时,您会更改缓冲区的偏移量(如果您查看javadoc,这是相对put操作)。也有绝对put操作,但是对于
字节缓冲区上的
int
没有这样的操作。最坏的情况是,如果您想重新阅读,您可以始终执行
final ByteBuffer newbuf=ByteBuffer.wrap(oldbuf.array())并读回