我需要Byte Array
使用 Java 代码将值写入 Cassandra。然后我将让我的 C++ 程序Byte Array
从 Cassandra 读取相同的数据。
该字节数组由三个字节数组组成,如下所述 -
short schemaId = 32767;
long lastModifiedDate = "1379811105109L";
byte[] avroBinaryValue = os.toByteArray();
现在,我将schemaId
,lastModifiedDate
并avroBinaryValue
一起写入一个Byte Array
生成的字节数组,我将写回 Cassandra,然后我将拥有我的 C++ 程序,该程序将从 Cassandra 检索该字节数组数据,然后将其反序列化以提取schemaId
,lastModifiedDate
并avroBinaryValue
从中提取它。
所以现在我很困惑在写 Cassandra 时是否应该在我的 Java 代码中使用 Big Endian?还是在将数据存储到 Cassandra 时这里的小字节序?
下面是代码,到目前为止,我在 Java 中已经将所有内容序列化为一个单字节数组......
public static void main(String[] args) throws Exception {
String os = "whatever os is";
byte[] avroBinaryValue = os.getBytes();
long lastModifiedDate = 1379811105109L;
short schemaId = 32767;
ByteArrayOutputStream byteOsTest = new ByteArrayOutputStream();
DataOutputStream outTest = new DataOutputStream(byteOsTest);
outTest.writeShort(schemaId); // first write schemaId
outTest.writeLong(lastModifiedDate); // second lastModifiedDate
outTest.writeInt(avroBinaryValue.length); // then attributeLength
outTest.write(avroBinaryValue); // then its value
byte[] allWrittenBytesTest = byteOsTest.toByteArray();
// write this allWrittenBytesTest into Cassandra
// now deserialize it and extract everything from it
DataInputStream inTest = new DataInputStream(new ByteArrayInputStream(allWrittenBytesTest));
short schemaIdTest = inTest.readShort();
long lastModifiedDateTest = inTest.readLong();
int sizeAvroTest = inTest.readInt();
byte[] avroBinaryValue1 = new byte[sizeAvroTest];
inTest.read(avroBinaryValue1, 0, sizeAvroTest);
System.out.println(schemaIdTest);
System.out.println(lastModifiedDateTest);
System.out.println(new String(avroBinaryValue1));
}
而且我还想看看在Java中是否有任何有效或适当的方法可以做到这一点,因为我需要使用C++程序从Cassandra检索这些数据,所以我不想在C++方面也有任何问题。所以我试图确保当我从 Java 端将此数据写入 Cassandra 时,一切看起来都很好。
现在,为了测试我正在做的事情是 - 我正在将这个字节数组写入来自 Java 程序的文件,我正在使用 C++ 程序读取同一个文件,然后相应地反序列化那个字节数组..
我希望我的问题足够清楚..有人可以帮我吗?