gpt4 book ai didi

java - 如何获取用于制作大字节数组的实际字节?

转载 作者:行者123 更新时间:2023-12-01 09:02:34 25 4
gpt4 key购买 nike

我有一种方法可以按照以下格式创建一个字节数组。

  • 首先它获得 avroBytes。
  • 然后它会快速压缩它。
  • 然后它会创建另一个具有特定格式的字节数组,如下所示。

方法如下:

  public static byte[] serialize(final Record record, final int clientId,
final Map<String, String> holderMap) throws IOException {
byte[] avroBytes = getAvroBytes(holderMap, record);
byte[] snappyCompressed = Snappy.compress(avroBytes);

int size = (2+8+4) + snappyCompressed.length;

ByteBuffer buffer = ByteBuffer.allocate(size);
buffer.order(ByteOrder.BIG_ENDIAN);
buffer.putShort((short) clientId);
buffer.putLong(System.currentTimeMillis());
buffer.putInt(snappyCompressed.length);
buffer.put(snappyCompressed);
buffer.rewind();

byte[] bytesToStore = new byte[size];
buffer.get(bytesToStore);

return bytesToStore;
}

现在我想在拥有 bytesToStore 后获取实际的 avroBytes

byte[] bytesToStore = serialize(......);
// now how can I get actual `avroBytes` using bytesToStore?

有办法找回来吗?

最佳答案

根据代码,压缩版本从 bytesToStore[14] 开始,因此一种简单但不一定最有效的方法是从该位置复制字节,然后调用Snappy.uncompress(字节)

类似这样的事情:

public static int HEADER_SIZE = 2 + 8 + 4;

public static byte[] extractAvroBytes(byte[] bytesToStore) throws IOException {
byte[] bytes = Arrays.copyOfRange(bytesToStore, HEADER_SIZE, bytesToStore.length);
return Snappy.uncompress(bytes);
}

我还没有对此进行测试,因此可能需要进行一些调整。

根据您使用的 snappy Java 接口(interface),可能有一些方法可以直接从序列化字节中解压缩数据,而无需制作中间副本。

关于java - 如何获取用于制作大字节数组的实际字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41558084/

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