Kryo 怎麼用

Kryo

經過比較, 比JDK自帶的序列化(Serializable AND Externalizable)要快得多,並且最後得到的Byte Array也要小很多。

但是比較悲劇的是

Threading

Kryo is not thread safe. Each thread should have its own Kryo instance.

難道每次使用都要去new 一個?

用Commons-pools行不行呢

public class PoolableKryoFactory implements PoolableObjectFactory<Kryo> {

	private static final Logger logger = LoggerFactory
			.getLogger(PoolableKryoFactory.class);

	public Kryo makeObject() throws Exception {
		logger.debug("makeObject");
		Kryo kryo = new Kryo();
		kryo.setRegistrationRequired(false);
                // ...
		return kryo;
	}

	public void destroyObject(Kryo obj) throws Exception {

	}

	public boolean validateObject(Kryo obj) {

		return true;
	}

	public void activateObject(Kryo obj) throws Exception {

	}

	public void passivateObject(Kryo obj) throws Exception {

	}

}

  private Kryo getKryo() {
		if (this.kryoFactory == null) {
			this.kryoFactory = new SoftReferenceObjectPool<Kryo>(
					new PoolableKryoFactory());
		}
		try {
			return this.kryoFactory.borrowObject();
		} catch (Exception ex) {
			throw new RuntimeException(ex);
		}
	}

	private void close(Kryo kryo) {
		try {
			this.kryoFactory.returnObject(kryo);
		} catch (Exception ex) {
			logger.error("returnObject", ex);
		}
	}

	public byte[] serialize(Object t) throws SerializationException {
		Kryo kryo = this.getKryo();
		try {
			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			Output output = new Output(outStream, 512);
			kryo.writeClassAndObject(output, t);
			output.flush();
			return outStream.toByteArray();
		} finally {
			this.close(kryo);
		}

	}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值