zoukankan      html  css  js  c++  java
  • 序列化 — FST序列化

    FST序列化全称是Fast Serialization,它是对Java序列化的替换实现。既然前文中提到Java序列化的两点严重不足,在FST中得到了较大的改善,FST的特征如下:

    1. 比JDK提供的序列化提升了10倍,体积也减少3-4倍多
    2. 支持堆外Maps,和堆外Maps的持久化
    3. 支持序列化为JSON

    一.FST序列化的使用

    FST的使用有两种方式,一种是快捷方式,另一种需要使用ObjectOutput和ObjectInput。

    static void quickStart() {
        FSTConfiguration conf = FSTConfiguration.createAndroidDefaultConfiguration();
        FstObject object = new FstObject();
        object.setName("huaijin");
        object.setAge(30);
        System.out.println("serialization, " + object);
        
        byte[] bytes = conf.asByteArray(object);
        
        FstObject newObject = (FstObject) conf.asObject(bytes);
        
        System.out.println("deSerialization, " + newObject);
    }
    
    

    直接使用FSTConfiguration提供的序列化和反序列化接口。FSTConfiguration也提供了注册对象的Class接口,如果不注册,默认会将对象的Class Name写入。

    这个提供了易用高效的API方式,不使用ByteArrayOutputStreams而直接得到byte[]。

    另一种方式是使用ObjectOutput和ObjectInput,能更细腻控制序列化的写入写出:

    static FSTConfiguration conf = FSTConfiguration.createAndroidDefaultConfiguration();
    
    static void writeObject(OutputStream outputStream, FstObject fstObject) throws IOException {
        FSTObjectOutput out = conf.getObjectOutput(outputStream);
        out.writeObject(fstObject);
        out.close();
    }
    
    static FstObject readObject(InputStream inputStream) throws Exception {
        FSTObjectInput input = conf.getObjectInput(inputStream);
        FstObject fstObject = (FstObject) input.readObject(FstObject.class);
        input.close();
        return fstObject;
    }
    

    二.FST在Dubbo中的应用

    Dubbo中对FstObjectInput和FstObjectOutput重新包装解决了序列化和反序列化空指针的问题。

    并且构造了FstFactory工厂类,使用工厂模式生成FstObjectInput和FstObjectOutput。其中同时使用单例模式,控制整个应用中FstConfiguration是单例,并且在初始化时将需要序列化的对象全部注册到FstConfiguration。

    对外提供了同一的序列化接口FstSerialization,提供serialize和deserialize能力。


    参考

    fast-serialization

  • 相关阅读:
    设置lable内容不上下居中
    iOS中webView加载URL需要处理特殊字符
    搞一个app需要多久?
    戏说HTML5
    限制UITextField/UITextView的输入字数与中文输入之后的英文换行问题
    iOS6以后的单个控制器横竖屏显示以及旋转屏控制技巧,附带iOS8以后显示电池状态栏
    纯命令行教你Cocoapods的安装和使用
    iOS开发之各种动画各种页面切面效果
    UITextView/UITextField检测并过滤Emoji表情符号
    类里面的大括号{}加载顺序
  • 原文地址:https://www.cnblogs.com/lxyit/p/12511625.html
Copyright © 2011-2022 走看看