【发布时间】:2021-08-17 01:52:53
【问题描述】:
我在这里找到了很多答案,但没有一个是我真正想要的。
假设我可以发送最大 10000 大小的图像,因此如果我发送例如 25796 的图像,我需要将 byte[] 拆分为 3、10000 + 10000 + 5796。
所以我想我应该有一个接收 byte[] 并返回列表的方法
我在一个循环中使用Arrays.copyOfRange,但最后一个字节很难获得(例如最后的那些 5796)。
希望有人可以帮助我。
非常感谢!
编辑:
我想我已经成功了,我需要测试更多的案例,但是明天我会这样做,因为我累了。如果一切正常,我会将其发布为答案。
这是我现在所拥有的:(有一个额外的方法来检查字节是否匹配)
public List<byte[]> byteSplitter(byte[] origin) {
List<byte[]> byteList = new LinkedList<>();
int splitIndex = 10000;
int currBytes = 0;
boolean bytesHasSameLength = false;
while (!bytesHasSameLength) {
if (splitIndex > origin.length) {
splitIndex = origin.length;
bytesHasSameLength = true;
}
byteList.add(Arrays.copyOfRange(origin, currBytes, splitIndex));
currBytes = splitIndex;
splitIndex += 10000;
}
return byteList;
}
public void appendByteAndCheckMatch(byte[] bytes, List<byte[]> byteList) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
for (byte[] b : byteList) {
try {
output.write(b);
} catch (IOException e) {
e.printStackTrace();
}
}
byte[] bytesFromList = output.toByteArray();
System.out.println("list bytes: " + bytesFromList.length);
System.out.println("request bytes: " + bytes.length);
if (Arrays.equals(bytesFromList, bytes))
System.out.println("bytes are equals");
else
System.out.println("bytes are different");
}
结果:
列表字节:25796 请求字节:25796 字节相等
【问题讨论】:
标签: java image-processing split byte