• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java实现几种序列化方式总结

Java实现几种序列化方式总结

作者:皮斯特劳沃 字体:[增加 减小] 来源:互联网 时间:2017-05-28

皮斯特劳沃 通过本文主要向大家介绍了java序列化,java序列化和反序列化,java序列化的作用,java对象序列化,什么是java序列化等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

0、前言

本文主要对几种常见Java序列化方式进行实现。包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化。

1、Java原生序列化

Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进行转化。需要注意的是JavaBean实体类必须实现Serializable接口,否则无法序列化。Java原生序列化代码示例如下所示:

package serialize;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
 * 
 * @author liqqc
 *
 */
public class JavaSerialize {
  public static void main(String[] args) throws ClassNotFoundException, IOException {
    new JavaSerialize().start();
  }

  public void start() throws IOException, ClassNotFoundException {
    User u = new User();
    List<User> friends = new ArrayList<>();
    u.setUserName("张三");
    u.setPassWord("123456");
    u.setUserInfo("张三是一个很牛逼的人");
    u.setFriends(friends);

    User f1 = new User();
    f1.setUserName("李四");
    f1.setPassWord("123456");
    f1.setUserInfo("李四是一个很牛逼的人");

    User f2 = new User();
    f2.setUserName("王五");
    f2.setPassWord("123456");
    f2.setUserInfo("王五是一个很牛逼的人");

    friends.add(f1);
    friends.add(f2);

    Long t1 = System.currentTimeMillis();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream obj = new ObjectOutputStream(out);
    for(int i = 0; i<10; i++) {
      obj.writeObject(u);
    }
    System.out.println("java serialize: " +(System.currentTimeMillis() - t1) + "ms; 总大小:" + out.toByteArray().length );

    Long t2 = System.currentTimeMillis();
    ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new java.io.ByteArrayInputStream(out.toByteArray())));
    User user = (User) ois.readObject();
    System.out.println("java deserialize: " + (System.currentTimeMillis() - t2) + "ms; User: " + user);
  }

}

</div>

运行结果:

java serialize: 8ms; 总大小:420

java deserialize: 1ms; User: User [userId=null, userName=张三, passWord=123456, userInfo=张三是一个很牛逼的人, friends=[User [userId=null, userName=李四, passWord=123456, userInfo=李四是一个很牛逼的人, friends=null], User [userId=null, userName=王五, passWord=123456, userInfo=王五是一个很牛逼的人, friends=null]]]
</div>

2、Json序列化

Json序列化一般会使用jackson包,通过ObjectMapper类来进行一些操作,比如将对象转化为byte数组或者将json串转化为对象。现在的大多数公司都将json作为服务器端返回的数据格式。比如调用一个服务器接口,通常的请求为xxx.json?a=xxx&b=xxx的形式。Json序列化示例代码如下所示:

package serialize;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * 
 * @author liqqc
 *
 */
public class JsonSerialize {
  public static void main(String[] args) throws IOException {
    new JsonSerialize().start();
  }

  public void start() throws IOException {
    User u = new User();
    List<User> friends = new ArrayList<>();
    u.setUserName("张三");
    u.setPassWord("123456");
    u.setUserInfo("张三是一个很牛逼的人");
    u.setFriends(friends);

    User f1 = new User();
    f1.setUserName("李四");
    f1.setPassWord("123456");
    f1.setUserInfo("李四是一个很牛逼的人");

    User f2 = new User();
    f2.setUserName("王五");
    f2.setPassWord("123456");
    f2.setUserInfo("王五是一个很牛逼的人");

    friends.add(f1);
    friends.add(f2);

    ObjectMapper mapper = new ObjectMapper();
    Long t1 = System.currentTimeMillis();
    byte[] writeValueAsBytes = null;
    for (int i = 0; i < 10; i++) {
      writeValueAsBytes = mapper.writeValueAsBytes(u);
    }
    System.out.println("json serialize: " + (System.currentTimeMillis() - t1) + "ms; 总大小:" + writeValueAsBytes.length);
    Long t2 = System.currentTimeMillis();
    User user = mapper.readValue(writeValueAsBytes, User.class);
    System.out.println("json deserialize: " + (System.currentTimeMillis() - t2) + "ms; User: " + user);

  }
}
</div>

运行结果:

json serialize: 55ms; 总大小:341

json deserialize: 35ms; User: User [userId=null, userName=张三, passWord=123456, userInfo=张三是一个很牛逼的人, friends=[User [userId=null, userName=李四, passWord=123456, userInfo=李四是一个很牛逼的人, friends=null], User [userId=null, userName=王五, passWord=123456, userInfo=王五是一个很牛逼的人, friends=null]]]
</div>

3、FastJson序列化

fastjson 是由阿里巴巴开发的一个性能很好的Java 语言实现的 Json解析器和生成器。特点:速度快,测试表明fastjson具有极快的性能,超越任其他的Java json parser。功能强大,完全支持java bean、集合、Map、日期、Enum,支持范型和自省。无依赖,能够直接运行在Java SE 5.0以上版本

支持Android。使用时候需引入FastJson第三方jar包。FastJson序列化代码示例如下所示:

package serialize;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
/**
 * 
 * @author liqqc
 *
 */
public class FastJsonSerialize {

  public static void main(String[] args) {
    new FastJsonSerialize().start();
  }

  public void start(){
    User u = new User();
    List<User> friends = new ArrayList<>();
    u.setUserName("张三");
    u.setPassWord("123456");
    u.setUserInfo("张三是一个很牛逼的人");
    u.setFriends(friends);

    User f1 = new User();
    f1.setUserName("李四");
    f1.setPassWord("123456");
    f1.setUserInfo("李四是一个很牛逼的人");

    User f2 = new User();
    f2.setUserName("王五");
    f2.setPassWord("123456");
    f2.setUserInfo("王五是一个很牛逼的人");

    friends.add(f1);
    friends.add(f2);

    //序列化 
    Long t1 = System.currentTimeMillis();
    String text = null;
    for(int i = 0; i<10; i++) {
      text = JSON.toJSONString(u); 
    }
    System.out.println("fastJson serialize: " +(System.currentTimeMillis() - t1) + "ms; 总大小:" + text.getBytes().length);
    //反序列化 
    Long t2 = System.currentTimeMillis();
    User user = JSON.parseObject(text, User.class);
    System.out.println("fastJson serialize: " + (System.currentTimeMillis() -t2) + "ms; User: " + user);
  }
}

</div>

运行结果:

fastJson serialize: 284ms; 总大小:269

fastJson serialize: 26ms; User: User [userId=null, userName=张三, passWord=123456, userInfo=张三是一个很牛逼的人, friends=[User [userId=null, userName=李四, passWord=123456, userInfo=李四是一个很牛逼的人, friends=null], User [userId=null, userName=王五, passWord=123456, userInfo=王五是一个很牛逼的人, friends=null]]]
</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 序列化版本号serialVersionUID的作用_动力节点Java学院整理
  • Java序列化和反序列化_动力节点Java学院整理
  • Java中对象的序列化详解及实例
  • Java 序列化和反序列化实例详解
  • Java实现几种序列化方式总结
  • 序列化版本号serialVersionUID的作用_动力节点Java学院整理
  • Java序列化和反序列化_动力节点Java学院整理
  • Java中对象的序列化详解及实例

相关文章

  • 2017-05-28JAVA 注解详解及简单实例
  • 2017-05-28基于Spring开发之自定义标签及其解析
  • 2017-05-28java数据结构与算法之冒泡排序详解
  • 2017-05-28关于Java变量的声明、内存分配及初始化详解
  • 2017-05-28详解SpringBoot的事务管理
  • 2017-05-28Jsoup解析html实现招聘信息查询功能
  • 2017-05-28详解JAVA类加载机制(推荐)
  • 2017-05-28Java IO流 File类的常用API实例
  • 2017-05-28Spring Boot启动过程全面解析(三)
  • 2017-05-28Spring中属性注入的几种方式以及复杂属性的注入详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java中&与&&的区别
    • Java中List Set和Map之间的区别_动力节点Java学院整理
    • javaWeb项目部署到阿里云服务器步骤详解
    • Java关键字this(动力节点Java学院整理)
    • CentOS安装solr 4.10.3详细教程
    • SWT(JFace) 文本编辑器 实现代码
    • Netty学习教程之基础使用篇
    • java 中继承和多态详细介绍
    • spring与mybatis三种整合方法
    • Java实现文件或文件夹的复制到指定目录实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有