Java 如何将整数放入给定位置的字节数组中?

Java 如何将整数放入给定位置的字节数组中?,java,arrays,byte,Java,Arrays,Byte,我想用给定位置的变量填充字节数组 作为一个简单的示例,下面的代码尝试在字节数组的位置10插入一个int变量(它将使用字节数组的字节10、11、12和13) 我不确定有哪些方法可以将int直接复制到较大字节数组的给定位置。一种方法是使用a,它已经具有将int拆分为4个字节的逻辑: public class HelloWorld{ public static void main(String []args){ // DESTIONATION BYTE ARRAY

我想用给定位置的变量填充字节数组

作为一个简单的示例,下面的代码尝试在字节数组的位置10插入一个int变量(它将使用字节数组的字节10、11、12和13)


我不确定有哪些方法可以将int直接复制到较大字节数组的给定位置。

一种方法是使用a,它已经具有将int拆分为4个字节的逻辑:

public class HelloWorld{

     public static void main(String []args){

       // DESTIONATION BYTE ARRAY
       byte[] myByteArray = new byte[64];

       // INTEGER
       int myInt = 542323;

       // I WANT TO PUT myInt AT POSITION 10 IN myByteArray
       // PSEUDOCODE BELOW:
       myByteArray.putInt(myInt, 10);

     }
}
byte[] array = new byte[64];

ByteBuffer buffer = ByteBuffer.allocate(4);
// buffer.order(ByteOrder.nativeOrder()); // uncomment if you want native byte order
buffer.putInt(542323);

System.arraycopy(buffer.array(), 0, array, 10, 4);
//                                         ^^
//                        change the 10 here to copy it somewhere else
当然,这会创建一个额外的字节数组和字节缓冲区对象,如果只使用位掩码,可以避免:

int x = 542323;
byte b1 = (x >> 24) & 0xff;
byte b2 = (x >> 16) & 0xff;
byte b3 = (x >> 8) & 0xff;
byte b4 = x & 0xff;

// or the other way around, depending on byte order 
array[10] = b4;
array[11] = b3;
array[12] = b2;
array[13] = b1;

想必您希望字节顺序与本机相同?据我所知,Java中的字节顺序是由标准定义的?所以它不像在C语言中,字节顺序取决于体系结构?这是真的。Java使用big-endian。但是,如果你将数据发送到一个小的endian设备,你可能会使用一个不同的字节顺序,对吗?如果我正确理解了Java的big endian与网络Endinance的匹配方式,这就是我在这里的意图(我打算通过UDP包发送数据)。因此,我不需要使用从其他地方获得的本机order(与本例相关):
byte[]totalByte=ByteBuffer.allocate(4.putin)(this.total.array()
为什么在那里使用了
.array()
,但在您的示例中没有使用?@M.E.我在代码中也使用了
.array()
。它是从一个
ByteBuffer
获取一个
字节[]