今天想使用的kryo替换掉原本java自带的序列化方式,原因是kryo的序列化速度实在是太香了,比Java至少高出了近4倍(但是kryo也有缺点,不够成熟,bug多,跨语言难等),这些都不是正点
在测试1w数据的时候,反序列化一直失败,抛出下面的错误
com.esotericsoftware.kryo.KryoException: Buffer underflow.
缓存溢出???!我原先还以为是数据太大了,就缩小数据量试一下,还是不行
尝试google,度娘都没有结果
下面先看看我的代码吧(下面的代码都是简化测试版)
写入
FileOutputStream os = new FileOutputStream (file)
Kyro kyro = new Kyro();
Output output = new Output (os);
kyro.writeClassAndObject(output ,object);
os .close()
output .close();
读取
FileInputStream is = new FileInputStream (file)
Kyro kyro = new Kyro();
Input input = new Intput (is);
kyro.readClassAndObject(output ,object);
is .close()
input .close();
Kyro kyro = new Kyro();
Output output = new Output (os);
kyro.writeClassAndObject(new FileOutputStream (file),object);
output .close();
没错,只是修改了一个FileOutputStream 的关闭而已。
在我测试1条数据的时候,发现写入序列化文件总是为null,我就意识到事情应该没有那么复杂了,
反复测试发现,如果存在使用FileOutputStream.close(),那么写入文件就会丢失
我也搞不懂原因再哪儿??