0

BigEndian バイト オーダー形式で ByteBuffer を適切に使用しようとしています。

Cassandraデータベースに保存する前に、単一のByteBufferにまとめようとしているフィールドがいくつかあります。

Cassandra に書き込むバイト配列は、以下で説明する 3 つのバイト配列で構成されています。

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

ここで、と を一緒に 1 つのバイト配列に書き込みemployeeId、その結果のバイト配列を Cassandra に書き込みます。次に、そのバイト配列データを Cassandra から取得し、デシリアライズして を抽出する C++ プログラムを作成します。それ。lastModifiedDateattributeValueemployeeIdlastModifiedDateattributeValue

これを行うために、BigEndian バイト オーダー形式の ByteBuffer を使用しています。

私はこのコードをまとめました -

public static void main(String[] args) throws Exception {

        String text = "Byte Buffer Test";
        byte[] attributeValue = text.getBytes();

        long lastModifiedDate = 1289811105109L;
        short employeeId = 32767;

        int size = 2 + 8 + 4 + attributeValue.length; // short is 2 bytes, long 8 and int 4

        ByteBuffer bbuf = ByteBuffer.allocate(size); 

        bbuf.order(ByteOrder.BIG_ENDIAN);
        bbuf.putShort(employeeId);
        bbuf.putLong(lastModifiedDate);
        bbuf.putInt(attributeValue.length);
        bbuf.put(attributeValue);

        bbuf.rewind();

        // best approach is copy the internal buffer
        byte[] bytesToStore = new byte[size];
        bbuf.get(bytesToStore);

        // write bytesToStore in Cassandra...

        // Now retrieve the Byte Array data from Cassandra and deserialize it...
        byte[] allWrittenBytesTest = bytesToStore;//magicFunctionToRetrieveDataFromCassandra();

        ByteBuffer bb = ByteBuffer.wrap(allWrittenBytesTest);

        bb.order(ByteOrder.BIG_ENDIAN);
        bb.rewind();

        short extractEmployeeId = bb.getShort();
        long extractLastModifiedDate = bb.getLong();
        int extractAttributeValueLength = bb.getInt();
        byte[] extractAttributeValue = new byte[extractAttributeValueLength];

        bb.get(extractAttributeValue); // read attributeValue from the remaining buffer

        System.out.println(extractEmployeeId);
        System.out.println(extractLastModifiedDate);
        System.out.println(new String(extractAttributeValue));

}

私が現在行っている方法で、これを行うより良い方法はありますか?または、ここでできるいくつかの小さな改善??

ByteBuffer を使用するのはこれが初めてなので、少し問題があります...

誰でも見て、これが ByteBuffer を使用する正しい方法であるかどうかを教えてもらえますか?

4

1 に答える 1