FST实现序列化
/** * 使用 FST 实现序列化 * * @author winterlau */ public class FSTSerializer implements Serializer { @Override public String name() { return "fst"; } @Override public byte[] serialize(Object obj) throws IOException { ByteArrayOutputStream out = null; FSTObjectOutput fout = null; try { out = new ByteArrayOutputStream(); fout = new FSTObjectOutput(out); fout.writeObject(obj); return out.toByteArray(); } finally { if (fout != null) try { fout.close(); } catch (IOException e) { } } } @Override public Object deserialize(byte[] bytes) throws IOException { if (bytes == null || bytes.length == 0) return null; FSTObjectInput in = null; try { in = new FSTObjectInput(new ByteArrayInputStream(bytes)); return in.readObject(); } catch (ClassNotFoundException e) { throw new CacheException(e); } finally { if (in != null) try { in.close(); } catch (IOException e) { } } } }
原生的java序列话
/** * 标准的 Java 序列化 * * @author winterlau */ public class JavaSerializer implements Serializer { @Override public String name() { return "java"; } @Override public byte[] serialize(Object obj) throws IOException { ObjectOutputStream oos = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(obj); return baos.toByteArray(); } finally { if (oos != null) try { oos.close(); } catch (IOException e) { } } } @Override public Object deserialize(byte[] bits) throws IOException { if (bits == null || bits.length == 0) return null; ObjectInputStream ois = null; try { ByteArrayInputStream bais = new ByteArrayInputStream(bits); ois = new ObjectInputStream(bais); return ois.readObject(); } catch (ClassNotFoundException e) { throw new CacheException(e); } finally { if (ois != null) try { ois.close(); } catch (IOException e) { } } } }
kryo序列话方式:
/** * Created by chenlei on 14-9-28. */ public class KryoPoolSerializer implements Serializer{ /** * Kryo 的包装 */ private static class KryoHolder { private Kryo kryo; static final int BUFFER_SIZE = 1024; private Output output = new Output(BUFFER_SIZE, -1); //reuse private Input input = new Input(); KryoHolder(Kryo kryo) { this.kryo = kryo; } } interface KryoPool { /** * get o kryo object * @return KryoHolder instance */ KryoHolder get(); /** * return object * @param kryo holder */ void offer(KryoHolder kryo); } /** * 由于kryo创建的代价相对较高 ,这里使用空间换时间 * 对KryoHolder对象进行重用 */ public static class KryoPoolImpl implements KryoPool { /** * default is 1500 * online server limit 3K */ /** * thread safe list */ private final Deque<KryoHolder> kryoHolderDeque=new ConcurrentLinkedDeque<KryoHolder>(); private KryoPoolImpl() { } /** * @return KryoPool instance */ public static KryoPool getInstance() { return Singleton.pool; } /** * get o KryoHolder object * * @return KryoHolder instance */ @Override public KryoHolder get() { KryoHolder kryoHolder = kryoHolderDeque.pollFirst(); // Retrieves and removes the head of the queue represented by this table return kryoHolder == null ? creatInstnce() : kryoHolder; } /** * create a new kryo object to application use * @return KryoHolder instance */ public KryoHolder creatInstnce() { Kryo kryo = new Kryo(); kryo.setReferences(false);// return new KryoHolder(kryo); } /** * return object * Inserts the specified element at the tail of this queue. * * @param kryoHolder ... */ @Override public void offer(KryoHolder kryoHolder) { kryoHolderDeque.addLast(kryoHolder); } /** * creat a Singleton */ private static class Singleton { private static final KryoPool pool = new KryoPoolImpl(); } } @Override public String name() { return "kryo_pool_ser"; } /** * Serialize object * @param obj what to serialize * @return return serialize data */ @Override public byte[] serialize(Object obj) throws IOException { KryoHolder kryoHolder = null; if (obj == null) throw new CacheException("obj can not be null"); try { kryoHolder = KryoPoolImpl.getInstance().get(); kryoHolder.output.clear(); //clear Output -->每次调用的时候 重置 kryoHolder.kryo.writeClassAndObject(kryoHolder.output, obj); return kryoHolder.output.toBytes();// 无法避免拷贝 ~~~ } catch (CacheException e) { throw new CacheException("Serialize obj exception"); } finally { KryoPoolImpl.getInstance().offer(kryoHolder); obj = null; //GC } } /** * Deserialize data * @param bytes what to deserialize * @return object */ @Override public Object deserialize(byte[] bytes) throws IOException { KryoHolder kryoHolder = null; if (bytes == null) throw new CacheException("bytes can not be null"); try { kryoHolder = KryoPoolImpl.getInstance().get(); kryoHolder.input.setBuffer(bytes, 0, bytes.length);//call it ,and then use input object ,discard any array return kryoHolder.kryo.readClassAndObject(kryoHolder.input); } catch (CacheException e) { throw new CacheException("Deserialize bytes exception"); } finally { KryoPoolImpl.getInstance().offer(kryoHolder); bytes = null; // for gc } } }
/** * 使用 Kryo 实现序列化 * @author winterlau */ public class KryoSerializer implements Serializer { private final static Kryo kryo = new Kryo(); @Override public String name() { return "kryo"; } @Override public byte[] serialize(Object obj) throws IOException { Output output = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); output = new Output(baos); kryo.writeClassAndObject(output, obj); output.flush(); return baos.toByteArray(); }finally{ if(output != null) output.close(); } } @Override public Object deserialize(byte[] bits) throws IOException { if(bits == null || bits.length == 0) return null; Input ois = null; try { ByteArrayInputStream bais = new ByteArrayInputStream(bits); ois = new Input(bais); return kryo.readClassAndObject(ois); } finally { if(ois != null) ois.close(); } } }
相关推荐
最长公共子序列的两种算法简介,一种是平时最常见的算法,还有一种用滚动数组来做的。
时间序列分析总结XXXX06.pptx
(sequence point)是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生,而两个序列点之间所有的表达式或代码执行顺序是未定义的。
BLOG_Oracle_lhr_【等待事件】序列等待事件总结(enq SQ - contention、row cache lock、DFS lock handle和enq SV - contention).pdfBLOG_Oracle_lhr_【等待事件】序列等待事件总结(enq SQ - contention、row ...
m序列是有n级线性移位寄存器产生的周期为2n −1的码序列,是最长线性移位寄存器序 列的简称。码分多址系统主要采用两种长度的m序列:一种是周期为215 −1的m序列,又称 短PN序列;另一种是周期为242 −1的m序列,又...
C#后台处理JSon数据
运用动态规划算法解决最长公共子序列问题,计算最长公共子序列长度的动态规划算法LCS_LENGTH(X,Y)以序列X=, x2, …, xm>和Y=, y2, …, yn>作为输入。输出两个数组c[0..m ,0..n]和b[1..m ,1..n]。其中c[i,j]存储Xi与...
uml学习总结,主要是关于uml中的类图和序列图
pdf
Python序列结构
了解序列化与反序列化,使用 印象笔记 打开,谢谢!
LIS.html 最长子序列问题总结,LeeTCode题目
只要对json和序列化和反序列化总结,以及代码的案例:我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET。
最近在做Python 的项目,特地整理了下 Python 序列的方法。序列sequence是python中最基本的数据结构,本文先对序列做一个简单的概括...返回:True,若果所有元素都为真的话 any(s) 返回:True,如果任一元素为True的
Java_Serializable(序列化) 的理解和总结
Market Reporter - 自动生成时间序列数据的简要总结
时间序列模型归纳总结复习.doc
这里是关于GluonTS官方API中Quick Start Tutorial部分的源码学习,通过阅读教程案例进行相关的翻译和一些自己的心得总结,如有错误,欢迎指正。官方API案例地址 1. 快速开始向导 GluonTS工具箱包含用于使用MXNet构建...
实验报告基于Verilog HDL语言的序列检测器的设计,