我对 Hector 处理键名和列名中的控制字符有疑问。我正在编写一个使用 Hector 与 Cassandra 实例对话的程序,并且有预先存在的键和列名称,例如十六进制“ 594d69e0b8e611e10000242d50cf1ff7 ”。
我已将该十六进制输入到 Java 字符串中,并通过一些简单的转换为文本的代码将其插入:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s1.length() - 1; i+=2 ){
/*Grab the hex in pairs*/
String output = s1.substring(i, (i + 2));
/*Convert Hex to Decimal*/
int decimal = Integer.parseInt(output, 16);
sb.append((char)decimal);
}
return sb.toString();
(通过调用 hexString.append(Integer.toHexString(textString.charAt(i))) 将返回的 Java 字符串转换回十六进制;对于每个字符,返回原始的十六进制,因此 Java 应该能够处理这些数据。)打印说Java String 产生下图中的第一行:
[图片未发布,因为不允许新用户发布图片。] 图片在这里:http: //i.stack.imgur.com/yUJxs.png
不幸的是,当我调用以下代码时,底线(损坏)是 Hector 返回给我的内容(为简单起见,省略了许多检查和设置):
OrderedRows<String, String, String> orderedRows;
orderedRows = rangeSlicesQuery.execute().get();
Row<String,String,String> lastRow = orderedRows.peekLast();
for (Row<String, String, String> r : orderedRows) {
String key = r.getKey();
System.out.println(key);
...
因此,Hector 在返回 Java 字符串时没有正确处理控制字符。如何让 Hector 将十六进制的键和列返回给我,而不是(损坏的)基于文本的 Java 字符串?我试图查找它,但基本上缺少有关如何执行此操作的文档(http://hector-client.github.com/hector//source/content/API/core/1.0-1/me/prettyprint/ hector/api/beans/OrderedRows.html - 什么是 K、V 和 N?)。我想它应该很简单,因为如果您不使用 ascii('') 包装输入,Cassandra CLI 假定为十六进制,但我不知道该怎么做。