【发布时间】:2016-04-13 16:09:59
【问题描述】:
我正在尝试通过使用kryo 库来获得更好的对象序列化性能。
我还有下一堂课
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();
}
}
}
我是用这个方法序列化的,注意我是单实例序列化
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 毫秒 内序列化完全相同的对象时。 p>
那么我做错了什么(这是我歌曲中的配音,哈哈)?
编辑
大小为1000000的数组的序列化,通过这些方法适当地创建和序列化
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实例而不是每次都创建一个新实例?您是否尝试过告诉 Kryo 写入整个数组而不是每个对象? -
@DarthAndroid 我正在序列化 CustomClass 的一个实例,我尝试通过 kryo 编写 int[] 数组,但是,性能再次低下
-
@DarthAndroid 此实例包含大小为 1000000 的字符串和整数数组
标签: java serialization kryo