gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:14:12 28 4
gpt4 key购买 nike

我对 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com