繁体   English   中英

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

[英]Hector does not handle Control Characters correctly in Java Strings - how to get Hexadecimal from Hector instead of text string?

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

不幸的是,当我调用以下代码时(最简单的问题是)赫克托尔返回给我(为了简化问题,省略了很多检查和设置):

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);
...

因此,返回Java字符串时,Hector无法正确处理控制字符。 我怎样才能让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节俭API也接受二进制。 但是,在现实生活中,人们喜欢处理诸如String,integer等人类类型。Hector通过抽象化序列化/反序列化逻辑,使您可以轻松使用节俭的API。

K,N和V分别是行键的类型,列名和列值的类型。 当您使用String,String,String时,您会告诉hector列族的所有三种类型都是Strings。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM