1

私はjavaとcassandrathriftを使用して、ComparatorをLongTypeとして持つColumnFamilyから行キーをフェッチしています。

これが私が使用しているコードです:

for (ColumnOrSuperColumn column : slice) {
    Column col = column.getColumn();
    System.out.println("Column Name: " + new String(col.name.array()));
    System.out.println("Column Name: " + new String(col.name.array(), "UTF-8"));
    System.out.println("Column Name: " + new String(col.getName(), "UTF-8" ) );
}

スライスは、 ColumnFamilyから取得したデータを保持するColumnOrSuperColumnオブジェクトのリストです。

問題は、どのprintステートメントも長い列名をStringとして出力しないことです。これらの長い値を文字列として使用して、jsonステートメントを作成します。私はここで何が間違っているのですか?期待される出力を得る他の方法はありますか?

Cassandraバージョン:1.1.0

4

1 に答える 1

2

コンパレータは LongType であるため、col.name.array() の内容は文字列ではなく long (8 バイト) です。

したがって、8 バイトを long に変換するメソッドが必要です。thrift は下で ByteBuffer を使用するため、これを行う最も簡単な方法は次を使用することです。

System.out.println("Column name: " + col.name.getLong(0));

ただし、これが通常、thrift API を直接使用するのではなく、型を正しく逆シリアル化するより高いレベルのクライアントを使用することが一般的に推奨される理由の一種であることに注意してください。

于 2012-11-22T09:29:12.827 に答える