Java 将三个ByteArray合并在一起,然后拆分生成的ByteArray
我的ByteArray值为Java 将三个ByteArray合并在一起,然后拆分生成的ByteArray,java,split,bytearray,Java,Split,Bytearray,我的ByteArray值为avroBinaryValue,架构名称值为StringschemaName,最后修改的日期值为lastModifiedDate byte[] avroBinaryValue = os.toByteArray(); String schemaName = "DEMOGRAPHIC"; long lastModifiedDate = "1379811105109"; 现在我还计划将schemaName转换为byteArray。让我们把它命名为byteSchmeName
avroBinaryValue
,架构名称值为StringschemaName
,最后修改的日期值为lastModifiedDate
byte[] avroBinaryValue = os.toByteArray();
String schemaName = "DEMOGRAPHIC";
long lastModifiedDate = "1379811105109";
现在我还计划将schemaName
转换为byteArray
。让我们把它命名为byteSchmeName
之后,我将把lastModifiedDate
转换为byteArray
。让我们将其命名为byteLMD
字节数组连接在一起的最佳方法是什么
avroBinaryValue+byteSchemaName+byteLMD
ByteArray
,这样我就能够正确地获得所有三个相应的ByteArray在不同的场景中,所有三个ByteArray值都将不同。。我正在寻找最有效的方法来存储生成的ByteArray,这样就不会占用磁盘上太多空间。我不想再次序列化它,因为我得到的avroBinaryValue来自Avro数据序列化。。因此,我想在ByteArray中转换其他两个元素,以便将这三个元素合并为一个ByteArray。您需要定义一种格式。你有以下几点
byte[] avroBinaryValue = os.toByteArray();
String schemaName = "DEMOGRAPHIC";
long lastModifiedDate = 1379811105109L;
我猜avroBinaryValue
可以是可变长度的,schemaName
也可以是可变长度的。出于所有目的,lastModifiedDate
可容纳8个字节
如果要序列化此文件(而不是使用Serializable
),则必须使用特定的格式来告诉您正在阅读的内容以及何时停止阅读。比如说
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
是一个字符串(为了简单起见)
它打印
whatever os is
DEMOGRAPHIC
1379811105109
我知道您试图节省空间,但最好将每个字段写入自己的列,或者使用XML或JSON等标准格式来序列化字段。如果您试图将数据写入磁盘并再次读取,则可以使用DataOutputStream和DataInputStream(当然还有FileOutputStream和FileInputStream).我会写信给Cassandra数据库,所以这就是我对disk说的原因。.谢谢你的建议。是的,你是正确的,avroBinaryValue将是可变长度的,schemaName也可以是可变长度的。.但大多数时候,它也会是固定的,让我们假设所有schemaName的长度都是8.但是LMD将始终是一个长的,并且是应该是8字节…如果可能的话,你能在我上面的场景中提供一个例子,看看如何用Java实现它。这将帮助我理解这个过程。@TrekkieTechieT-T我已经发布了一个内存中的例子。谢谢你的帮助。。是的,我完全理解,最好使用JSON或将它作为一个单独的列来写。。但是我不能作为一个单独的列bcoz,我将使用Cassandra,每当我们存储数据时,每个列名都会重复,因此这将是一种浪费空间的行为……一般来说,我知道这是一个愚蠢的问题,但如果我使用JSON并将其序列化为JSON,那么哪种方法更好?我们现在正在使用的方法还是使用JSON?which在性能方面会更好?@trekkietchiet-T在大小方面,使用上述方法,您将编写更少的字节。但是,您必须编写所有这些逻辑来解析/生成字节。使用JSON,您可以使用许多可用库中的任何一个,Gson、jackson、Simple JSON等。我知道这是一篇非常古老的文章,但正在尝试了解本例中使用的是大端字节顺序还是小端字节顺序?以及如何知道我们遵循的是哪种顺序?
whatever os is
DEMOGRAPHIC
1379811105109