java - Hector 无法正确处理 Java 字符串中的控制字符 - 如何从 Hector 获取十六进制而不是文本字符串?

标签 java hex hector control-characters

我对 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 String 转换回十六进制);对于每个字符,返回原始的十六进制,因此 Java 应该能够处理此数据。 )打印所述 Java 字符串会产生下图中的顶行:

[图像未发布,因为不允许新用户发布图像。] 图片在这里:/image/yUJxs.png

不幸的是,当我调用以下代码时,底线(已损坏)是赫克托返回给我的内容(为了简化问题,省略了很多检查和设置):

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 会假定十六进制,但我不知道如何做到这一点。

最佳答案

在 Cassandra 中,所有内容都存储为十六进制字节。 Cassandra thrift API 也接受二进制。然而,在现实生活中,人们喜欢处理字符串、整数等人类类型。Hector 通过抽象出序列化/反序列化逻辑,使您可以轻松使用 thrift API。

K、N、V 分别是行键、列名、列值的类型。当您使用 String, String, String 时,您是在告诉 hector 您的列族的所有三种类型都是字符串。

如果您将行键和列名称存储为字节,则应使用 byte[] 进行检索,并使用 BytesArraySerializer 进行序列化。

关于java - Hector 无法正确处理 Java 字符串中的控制字符 - 如何从 Hector 获取十六进制而不是文本字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554805/

相关文章:

java - 可扩展的 API 服务器,带有 ReSTLet?

java - 字符串二进制到十六进制 Java

nosql - 使用复合键插入 cassandra 列族

java - Cassandra 赫克托 :how to fetch column family with composite key

java - 子类中如何调用父类对象?

java - Java 中使用子构造函数初始化父类,理论上

Java I/O : How to Print Loop Outputs to one file?

python - 将十六进制字符串转换为字节数组

sorting - 使用 RandomPartioner 和 Hector 作为客户端时如何从 cassandra 中获取已排序的行?

java - 获取 JAR 文件版本号