java 序列化速度_加快Java的文件序列化速度-Fun言

自从第一个Java版本开始,很多开发人员一直都在尝试让Java获得最少和C/C++一样的表现。JVM提供商尽他们最大的努力去实现一些新的JIT算法,但是还是有很多需要做的,特别是在我们使用Java的方法上。

例如,在对象文件序列化上就差距很大–尤其在读写内存对象上。我将就这个主题做一些解释和分享。

所有的测试都是在下面这个对象上执行的:

1

public class TestObjectimplements Serializable

{

2

3

private long longVariable;

4

private long[]

longArray;

5

private String

stringObject;

6

private String

secondStringObject;//just

for testing nulls

7

8

/*

getters and setters */

9

}

最标准的java序列化(我们都是从这里学起的)是这样的:

01

public void testWriteBuffered(TestObject

test, String fileName)throwsIOException

{

02

ObjectOutputStream

objectOutputStream =null;

03

try {

04

FileOutputStream

fos =new FileOutputStream(fileName);

05

BufferedOutputStream

bos =new BufferedOutputStream(fos);

06

objectOutputStream

=new ObjectOutputStream(bos);

07

objectOutputStream.writeObject(test);

08

}finally {

09

if (objectOutputStream

!=null)

{

10

objectOutputStream.close();

11

}

12

}

13

}

提升标准序列化速度的最简单方法时使用RandomAccessFile对象:

01

public void testWriteBuffered(TestObject

test, String fileName)throwsIOException

{

02

ObjectOutputStream

objectOutputStream =null;

03

try {

04

RandomAccessFile

raf =new RandomAccessFile(fileName,"rw");

05

FileOutputStream

fos =new FileOutputStream(raf.getFD());

06

objectOutputStream

=new ObjectOutputStream(fos);

07

objectOutputStream.writeObject(test);

08

}finally {

09

if (objectOutputStream

!=null)

{

10

objectOutputStream.close();

11

}

12

}

更高深点的技术是使用Kryo框架,新旧版本的差距是很大的,我做过测试。因为性能比较上并没有体现出特别引人注意的差异,所以我将使用2.x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值