私はただバイトとしてメッセージを受け取るキューサービスを使用しているので、データをフォーマットにすばやく変換し、キューから作業を受け取ったときにオリジナルに戻す必要があります。私のデータ形式は、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
がコードの中で最も重い部分だと思います。
私は周りに尋ねたし、このクリーナーを行うことができるようにGsonが見つかりましたが、パフォーマンスは(そのGson自身がそれをやってthatsの)今、今、私のループの40%以上である:
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]);
だから私は思ったんだけどもし同じ結果を得るより速い方法があれば、私はこのquestionの提案のいくつかを試していますが、私のニーズが非常に単純であるため、外部ライブラリに依存しないでこれを行うより速い方法があります速いもの)?誰かがGsonを提案したので、私はJsonパーサを調べましたが、私が探しているはずのもの、またはこれを行う他の種類のライブラリがありますか?
編集:私はそれをgetBytes()
として送信する必要があると思ったため、文字列に変換していますが、他のフォーマットではより速くgetBytes()
を使用できますか?
toByteArray()のためにそれの価値があるストリームにそれを使用しますシリアル化/逆シリアル化します。 – assylias
これを行うためのより速い方法がたくさんあります。ストリングで何をしていますか?なぜなら、最も速いアプローチはそれらをまったく使用しないためである。 –
@PeterLawrey(私の知る限り)キューサーバーは 'getBytes()'としてデータを送信する必要があります。それを行うためには文字列に変換する必要があると思いました。 –