1

我正在使用 java 和 cassandra thrift 从具有比较器作为 LongType 的列族中获取行键。

这是我正在使用的代码:

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 检索到的数据。

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

卡桑德拉版本:1.1.0

4

1 回答 1

2

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

因此,您需要一种将 8 个字节转换为长字节的方法。由于 thrift 在下面使用 ByteBuffer,最简单的方法是使用:

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

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

于 2012-11-22T09:29:12.827 回答