メッセージをバイトとしてのみ受け取るキュー サービスを使用しているため、データをすばやくフォーマットに変換し、キューから作業を受け取ったときに元のデータに戻す必要があります。私のデータ形式は INT、DOUBLE、および INT[] です。最初に行った方法は次のとおりです。
//to convert to string
String[] message = { Integer.toString(number), String.valueOf(double), Arrays.toString(my_list) };
message.asString;
//to convert back
String message_without_brackets = message.replace("[", "" ).replace("]", "");
String[] temp_message = message_without_brackets.split(",");
int interger = Integer.valueOf(temp_message[0]);
double double = Double.valueOf(temp_message[1]);
int[] my_list = new int[temp_message.length-2]; //-2 because the first two entries are other data
for (int i = 2; i < temp_message.length; i++) {
my_list[i-2] = Integer.parseInt(temp_message[i].replace(" ",""));
}
これは非常に醜く、数週間後(または一晩大量に飲んだ後)、おそらくこれをすぐに理解できないことに腹を立てました. パフォーマンスに関しては、コードはそれほど悪くはありませんでしたreplace
。コードの最も重い部分だったと思います (覚えていれば、実行全体の 15% 程度でした)。
私は周りに尋ねて、Gsonがこのクリーナーを実行できることを発見しましたが、パフォーマンスは現在ループの40%を超えています(Gson自体がそれを実行しています):
Gson gson = new Gson();
int[] sub = { 0, 59, 16 };
Object[] values = { 0, 43.0, sub };
String output = gson.toJson(values); // => [0, 43.0,[0,59,16]]
Object[] deserialized = gson.fromJson(output, Object[].class);
System.out.println(deserialized[0]);
System.out.println(deserialized[1]);
System.out.println(deserialized[2]);
だから私は同じ結果を得るためのより速い方法があるかどうか疑問に思っていますか?そうではなく、速いものはありますか)?誰かがGsonを提案したので、私はJsonパーサーを見ましたが、それは私が探しているべきものですか、それともこれを行う他のタイプのライブラリがありますか?
編集: として送信するためにそれを行う必要があると思ったので、文字列に変換しています。getBytes()
使用できるより高速な他の形式はありますgetBytes()
か?