gpt4 book ai didi

java - 将三个 ByteArray 合并在一起,然后拆分生成的 ByteArray

转载 作者:行者123 更新时间:2023-12-01 14:04:36 30 4
gpt4 key购买 nike

我的 ByteArray 值为 avroBinaryValue ,架构名称值为 String schemaName ,上次修改日期值为 long 的 lastModifiedDate

byte[] avroBinaryValue = os.toByteArray();
String schemaName = "DEMOGRAPHIC";
long lastModifiedDate = "1379811105109";

现在我也计划将 schemaName 转换为 byteArray 。我们将其命名为 byteSchmeName

之后,我还将把 lastModifiedDate 转换为 byteArray 。我们也将其命名为 byteLMD

  1. 现在将这三个 byteArrays 连接在一起的最佳方法是什么。

    avroBinaryValue + byteSchemaName + byteLMD

  2. 其次,将这三个 byteArray 连接在一起后,我想以这样的方式分割生成的 byteArray ,以便我能够正确获取所有三个各自的 byteArray...

可以这样做吗?任何帮助将不胜感激。

注意:-

所有三个 byteArrays 值在不同的场景中都会有所不同。我正在寻找最有效的方法来存储生成的 byteArrays,这样就不会占用磁盘上太多的空间。我不想再次序列化它,因为我得到的 avroBinaryValue 来自 Avro 数据序列化。所以我想在 ByteArray 中转换其他两个内容,以便我可以将所有三个内容合并到一个 ByteArray 中。

最佳答案

您需要定义一种格式。您有以下内容

byte[] avroBinaryValue = os.toByteArray();
String schemaName = "DEMOGRAPHIC";
long lastModifiedDate = 1379811105109L;

我猜avroBinaryValue可以是可变长度,schemaName也可以。出于所有意图和目的,lastModifiedDate 适合长整型,即。 8 字节。

如果您想序列化它(除了使用Serialized),您必须使用特定的格式来告诉您正在读取的内容以及何时停止读取。例如

Offset  Length (in bytes)      Purpose
0 4 - length of avroBinaryValue array
4 X - avroBinaryValue array
4+X 4 - length of of schemaName byte array
4+X+4 Y - schemaName byte array
4+X+4+Y 8 - value of lastModifiedDate

还要决定是否需要大端字节顺序或小端字节顺序。

因此,您按照格式中的描述编写三个字段,并以相同的方式读取它。

<小时/>

这是在内存中完成的示例,其中 os 是一个 String(为了简单起见)

public static void main(String[] args) throws Exception {
String os = "whatever os is";
byte[] avroBinaryValue = os.getBytes();
String schemaName = "DEMOGRAPHIC";
long lastModifiedDate = 1379811105109L;

byte[] schemaNameBytes = schemaName.getBytes();

ByteArrayOutputStream byteOs = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(byteOs);
out.writeInt(avroBinaryValue.length);
out.write(avroBinaryValue);
out.writeInt(schemaNameBytes.length);
out.write(schemaNameBytes);
out.writeLong(lastModifiedDate);

// write done

byte[] allWrittenBytes = byteOs.toByteArray();

DataInputStream in = new DataInputStream(new ByteArrayInputStream(allWrittenBytes));

int sizeAvro = in.readInt();
avroBinaryValue = new byte[sizeAvro];
in.read(avroBinaryValue, 0, sizeAvro);

int sizeSchema = in.readInt();
schemaNameBytes = new byte[sizeSchema];
in.read(schemaNameBytes, 0, sizeSchema);

lastModifiedDate = in.readLong();

// read done

System.out.println(new String(avroBinaryValue));
System.out.println(new String(schemaNameBytes));
System.out.println(lastModifiedDate);
}

打印

whatever os is
DEMOGRAPHIC
1379811105109
<小时/>

我知道您正在尝试节省空间,但将每个字段写入其自己的列或使用 XML 或 JSON 等标准格式来序列化您的字段可能会更好。

关于java - 将三个 ByteArray 合并在一起,然后拆分生成的 ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018784/

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