Cassandra LongType列名为String问题

时间:2012-11-22 06:24:03

标签: java cassandra thrift

我正在使用java和cassandra thrift从具有Comparator为LongType的Column Family中获取rowkey。

以下是我正在使用的代码:

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" ) );
}

slice ColumnOrSuperColumn 对象的列表,它保存从ColumnFamily检索到的数据。

问题是print语句都没有将长列名称打印为String。我希望那些长值作为字符串来创建一个json语句。我在这里错了什么?有没有其他方法可以获得预期的输出?

Cassandra版本:1.1.0

1 个答案:

答案 0 :(得分:2)

由于比较器是LongType,col.name.array()的内容是一个长(8个字节),而不是一个字符串。

所以你需要一个方法将8个字节转换为long。由于thrift在下面使用ByteBuffer,最简单的方法是使用:

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

但请注意,这通常是为什么通常建议不要直接使用thrift API,而是使用更高级别的客户端来为您正确地反序列化类型。