gpt4 book ai didi

java - 如何使用ByteBuffer进行short到byte[]的转换?

转载 作者:行者123 更新时间:2023-12-01 19:42:12 24 4
gpt4 key购买 nike

我有一个类 Packet,我编写该类来填充 516 字节的 byte[] 数组。 2 表示 packetNum (short),2 表示 authKey (short),512 表示audio(字节[])。在我的 Packet 类中,有一个方法将这些属性组合在一起以创建大小为 516 的 byte[] 数组,以发送给收件人:

public byte[] toByteArray() {
byte[] fullArray = new byte[516];

ByteBuffer packetNumBuffer = ByteBuffer.allocate(2);
packetNumBuffer.putShort(this.packetNum);
byte[] packetNumArray = packetNumBuffer.array();

ByteBuffer authKeyBuffer = ByteBuffer.allocate(2);
authKeyBuffer.putShort(this.authKey);
byte[] authKeyArray = authKeyBuffer.array();

System.arraycopy(packetNumArray, 0, fullArray, 0, packetNumArray.length);
System.arraycopy(authKeyArray, 0, fullArray, packetNumArray.length, authKeyArray.length);
System.arraycopy(this.audio, 0, fullArray, authKeyArray.length, this.audio.length);
return fullArray;
}

现在,在测试接收到的数据包时,我的 packetNum (在创建下一个 Packet 之前递增)已成功传输 - 但是,authKeyaudio 是完全错误的。这是我的代码的输出,它使用 short authKey = 10short packetNum = 0 创建一个新的 Packet:

Packet number: 0
Auth key = -7936
Packet number: 1
Auth key = 19201
Packet number: 2
Auth key = 31490
Packet number: 3
Auth key = -1
Packet number: 4
Auth key = -2
Packet number: 5
Auth key = -3
Packet number: 6
Auth key = -4
Packet number: 7
Auth key = -3
Packet number: 8
Auth key = -2
Packet number: 9
Auth key = -1
Packet number: 10
Auth key = 8192

身份验证 key 为每个数据包生成随机数,而所有数据包的身份验证 key 应为 10。这让我相信我的方法没有按预期填充我的 fullArray 。谁能发现我做错了什么吗?

最佳答案

错误就出在这里

System.arraycopy(this.audio, 0, fullArray, authKeyArray.length, this.audio.length);

起始位置为authKeyArray.length
但应该是authKeyArray.length + packetNumArray.length

<小时/>

无论如何,System.arraycopy 是绝对要避免的方法之一。
我的建议是,使用 ByteArrayOutputStream

final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(516);
outputStream.write(packetNumArray);
outputStream.write(authKeyArray);
outputStream.write(audio);
final byte[] fullArray = outputStream.toByteArray();

是不是更加优雅了?

关于java - 如何使用ByteBuffer进行short到byte[]的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com