我需要使用Java代码将Byte Array值写入Cassandra。然后,我将使用C ++程序从Cassandra中读取相同的Byte Array数据。

该字节数组由三个字节数组组成,如下所述-

short schemaId = 32767;
long lastModifiedDate = "1379811105109L";
byte[] avroBinaryValue = os.toByteArray();


现在,我将schemaIdlastModifiedDateavroBinaryValue一起写到单个Byte Array中,然后将得到的字节数组写回到Cassandra中,然后使用C ++程序检索该字节数组。来自Cassandra的数据,然后反序列化以从中提取schemaIdlastModifiedDateavroBinaryValue

因此,现在我困惑在写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/

10-12 04:08
查看更多