java — Big Endian или Small Endian при сохранении данных в Кассандре?

Мне нужно написать Byte Array значение в Cassandra с использованием кода Java. Тогда у меня будет программа на С ++, чтобы читать то же самое Byte Array данные от Кассандры.

Этот байтовый массив состоит из трех байтовых массивов, как описано ниже:

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

Сейчас напишу schemaId , lastModifiedDate а также avroBinaryValue вместе в один Byte Array и что в результате этого Byte Array я напишу обратно в Cassandra, а затем у меня будет программа на C ++, которая будет извлекать данные Byte Array из Cassandra, а затем десериализовать их для извлечения. schemaId , lastModifiedDate а также avroBinaryValue от него.

Так что теперь я запутался, должен ли я использовать Big Endian здесь в своем коде Java при записи в Cassandra? Или небольшой порядок байтов 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, так как мне нужно получить эти данные из Cassandra с помощью программы C ++, поэтому я не хочу иметь никаких проблем и на стороне C ++. Так что Я пытаюсь убедиться, что когда я пишу эти данные в Cassandra со стороны Java, все выглядит хорошо ..

Прямо сейчас, для проверки того, что я делал, я записывал этот Byte Array в файл из программы Java, и я читал тот же файл с помощью программы C ++, а затем десериализовал этот Byte Array соответственно …

Я надеюсь, что мой вопрос достаточно ясен .. Кто-нибудь может мне помочь с этим?

0

Решение

Почему бы не использовать фреймворк по поиску подходов, такой как google protobuf (http://code.google.com/p/protobuf/) таким образом вам не нужно беспокоиться о деталях низкого уровня, а также читать и писать на любом языке и инструментах

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector