キー名と列名の制御文字の Hector の処理に問題があります。Hector を使用して Cassandra インスタンスと対話するプログラムを作成しています。既存のキーと列名には、たとえば 16 進数の「594d69e0b8e611e10000242d50cf1ff7」があります。
その 16 進数を Java String に入力し、単純なテキストへの変換コードを介してプラグインしました。
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();
(返された Java 文字列を hexString.append(Integer.toHexString(textString.charAt(i))); を呼び出して 16 進数に戻すと、元の 16 進数が返されるため、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 文字列を返すときに制御文字を適切に処理していません。(破損した) テキストベースの Java 文字列の代わりに、 Hector にキーと列を16 進数で返してもらうにはどうすればよいですか? 私はそれを調べようとしましたが、その方法に関するドキュメントは本質的に欠落しています ( 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 は 16 進数を想定しているため、単純なはずだと思いますが、その方法がわかりません。