我需要使用Java代码将Byte Array
值写入Cassandra。然后,我将使用C ++程序从Cassandra中读取相同的Byte Array
数据。
该字节数组由三个字节数组组成,如下所述-
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时按小Endian字节顺序排列?
以下是我到目前为止在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 ++程序读取该文件,然后对该字节数组进行反序列化。
我希望我的问题很清楚。有人可以帮助我吗?
最佳答案
为什么不以这种方式使用Google protobuf(http://code.google.com/p/protobuf/)之类的序列化框架,而无需担心底层细节以及从任何语言和工具进行读写操作
关于java - 将数据存储到Cassandra中时是Big Endian还是Small Endian?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19108826/