Big Endian或Small Endian将数据存储到Cassandra中?

时间:2013-10-01 05:45:27

标签: java c++ cassandra bytearray endianness

我需要使用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 ++程序读取同一个文件,然后相应地反序列化该字节数组。

我希望我的问题很清楚..任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为什么不使用像google protobuf(http://code.google.com/p/protobuf/)这样的序列化框架,这样你就不必担心低级别的细节以及从任何语言和工具中读写回写