Я пытаюсь получить более высокую производительность сериализации объекта с помощью библиотеки kryo
.java kryo 3.0.3 скорость сериализации низкого объекта
У меня есть следующий класс
public class CustomClass {
private String name;
private int[] array;
public CustomClass(String name, int size){
this.name = name;
fillArray(size);
}
private CustomClass(){ }
private void fillArray(int size){
array = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++){
array[i] = random.nextInt();
}
}
}
Я serilizing его с помощью этого метода, обратите внимание, что я делаю сериализации из одного экземпляра
public void kryoWrite(Object object){
Kryo kryo = new Kryo();
Output output = null;
try {
output = new Output(new FileOutputStream("kryo.txt"));
kryo.writeObject(output, object);
} catch (IOException e){
e.printStackTrace();
} finally {
if (output != null) {
output.close();
}
}
}
но сериализации тот же объект с использованием стандартных в Java Serializable
интерфейс работает быстрее. Например, когда я передаю 1000000 как второй параметр для конструктора kryo
сериализует объект в 188 мс, когда Serializable
сериализует точно такой же объект в 136 мс.
Так что я делаю неправильно (это дабстеп в моей песне, LOL)?
РЕДАКТИРОВАТЬ
Сериализация массива с размером 1000000, созданной и serializaed этими методами соответствующим
public static int[] getArray(int size){
int[] array = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++){
array[i] = random.nextInt();
}
return array;
}
public static void kryoWriteArray(int[] array) throws FileNotFoundException {
Kryo kryo = new Kryo();
Output output = new Output(new FileOutputStream("array.txt"));
output.writeInts(array);
output.close();
}
занимает 139 мс.
Вы пытались повторно использовать экземпляр Kryo вместо того, чтобы создавать новый каждый раз? Вы пытались рассказать Крио написать весь массив вместо каждого объекта? –
@DarthAndroid Я сериализую один экземпляр CustomClass, я попытался написать массив int [] by kryo, но, опять же, производительность низкая –
@DarthAndroid этот экземпляр содержит String и массив из int с размером 1000000 –