Я использую службу очереди, которая принимает только сообщения в виде байта, поэтому мне нужно быстро преобразовать свои данные в формат, а затем вернуть его к исходному, когда я получаю работу из очереди. Мой формат данных является 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 Thats делает это):
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, но есть ли более быстрый способ сделать это, не зависимо от каких-либо внешних библиотек, поскольку мои потребности довольно просты (если нет, то есть быстрый)? Поскольку кто-то предложил Гссона, я посмотрел на парсеров Json, но это то, что я должен искать, или есть ли другие типы библиотек, которые это делают?
EDIT: Я преобразовываю его в строку, потому что я думал, что мне нужно сделать это, чтобы отправить его как getBytes()
, есть ли какой-либо другой формат, который будет быстрее, чем я могу использовать getBytes()
?
Вы могли бы, возможно, есть класс, который держит INT, двойной и INT [], и сериализовать/десериализовать его. – assylias
Есть много более быстрых способов сделать это. Что вы делаете со струнами? то почему они нужны, потому что самый быстрый подход - не использовать их вообще. –
@PeterLawrey сервер очереди (насколько мне известно) требует данных для отправки как 'getBytes()' Я думал, что мне нужно преобразовать его в строку, чтобы это сделать. –