java对象序列化与反序列化的默认格式和json格式使用示例

 更新时间:2014年02月21日 15:16:35   作者:  
这篇文章主要介绍了java对象序列化与反序列化的默认格式和json格式使用示例,需要的朋友可以参考下

默认格式

复制代码 代码如下:

public class MyClass implements Serializable{
...}

序列化:

复制代码 代码如下:

ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(outputPath));
output.writeObject(myObject);

反序列化:

复制代码 代码如下:

ObjectInputStream input = new ObjectInputStream(new FileInputStream(inputPath));
return (MyClass)input.readObject();

JSON格式

使用jackson包。jackson是一个效率非常高的Java JSON包。文档和下载见官网。

序列化

复制代码 代码如下:

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File(outputPath), myObject);

反序列化:

复制代码 代码如下:

return mapper.readValue(new File(outputPath), MyClass.class);

完整测试代码

复制代码 代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Zoo implements Serializable {

    private static final long serialVersionUID = 1L;
    private static ObjectMapper mapper = new ObjectMapper();

    public static int maxAnimalCount;
    public ArrayList<String> animals;

    public Zoo() {
        animals = new ArrayList<String>();
    }

    public static void setMax(int max){
        maxAnimalCount = max;
    }

    /**
     * Add an animal to animals Array.
     * @param animalName
     */
    public void addAnimal(String animalName){
        if (animals.size() < maxAnimalCount)
            animals.add(animalName);
    }

    @Override
    public String toString(){
        return "Zoo: \n animals: " + animals.toString() +
                "\n maxAnimalCount: " + maxAnimalCount + "\n";
    }

    /**
     * Output standard serialization to file at logPath.
     * @param logPath
     */
    public void serializeToLog(String logPath) {
        ObjectOutputStream output = null;
        try
        {
            output = new ObjectOutputStream(
                    new FileOutputStream(logPath));
            output.writeObject(this);
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Output JSON serialization(using jackson) to file at logPath.
     * @param logPath
     */
    public void serializeJSONToLog(String logPath){

        try {
            mapper.writeValue(new File(logPath), this);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Standard deserialize a Zoo instance from file at logPath.
     * @param logPath
     * @return deserialized zoo instance
     */
    public static Zoo deserializeFromLog(String logPath) {
        ObjectInputStream input = null;
        try
        {
            input =new ObjectInputStream(
                    new FileInputStream(logPath));
            return (Zoo)input.readObject();
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    /**
     * JSON deserialize a Zoo instance from file at logPath.
     * @param logPath
     * @return JSON deserialized zoo instance
     */
    public static Zoo deserializeJSONFromLog(String logPath){
        try {
            return mapper.readValue(new File(logPath), Zoo.class);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

class ZooSerializeTest {
    public static void main(String[] args) {
        Zoo zoo1 = new Zoo();
        Zoo.setMax(100);
        zoo1.addAnimal("hamster");
        zoo1.addAnimal("sheep");

        zoo1.serializeToLog("zoo1.log");

        Zoo zoo2 = new Zoo();
        Zoo.setMax(200);
        zoo2.addAnimal("tiger");

        zoo2.serializeToLog("zoo2.log");

        Zoo.setMax(300);

        //Deserialization
        zoo1 = Zoo.deserializeFromLog("zoo1.log");
        zoo2 = Zoo.deserializeFromLog("zoo2.log");

        System.out.println("zoo1: \n" + zoo1);
        System.out.println("zoo2: \n" + zoo2);

        //Serialize to JSON
        zoo1.serializeJSONToLog("zoo1.json");
        zoo1 = Zoo.deserializeJSONFromLog("zoo1.json");

        System.out.println("zoo1 from json: \n" + zoo1);
    }
}

相关文章

  • 解决springboot错误:找不到或无法加载主类(配置编码或者Maven)

    解决springboot错误:找不到或无法加载主类(配置编码或者Maven)

    这篇文章主要介绍了解决springboot错误:找不到或无法加载主类(配置编码或者Maven)问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Springboot 如何指定获取出 yml文件里面的配置值

    Springboot 如何指定获取出 yml文件里面的配置值

    这篇文章主要介绍了Springboot 如何指定获取出 yml文件里面的配置值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 详解MybatisPlus中@Version注解的使用

    详解MybatisPlus中@Version注解的使用

    在MyBatisPlus中,常常使用@Version实现乐观锁,该注解用于字段上面。本文将通过示例详细讲解@Version注解的使用,感兴趣的可以了解一下
    2022-06-06
  • 详解关于IntelliJ IDEA中Schedule for Addition 的问题

    详解关于IntelliJ IDEA中Schedule for Addition 的问题

    本篇文章主要介绍了详解关于 IntelliJ IDEA 中 Schedule for Addition 的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • JAVA biginteger类bigdecimal类的使用示例学习

    JAVA biginteger类bigdecimal类的使用示例学习

    这篇文章主要为大家介绍了JAVA biginteger类bigdecimal类的使用示例学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java虚拟机JVM性能优化(一):JVM知识总结

    Java虚拟机JVM性能优化(一):JVM知识总结

    这篇文章主要介绍了Java虚拟机JVM性能优化(一):JVM知识总结,本文是系列文章的第一篇,后续篇章请继续关注脚本之家,需要的朋友可以参考下
    2014-09-09
  • java实现简单注册选择所在城市

    java实现简单注册选择所在城市

    这篇文章主要为大家详细介绍了java实现简单注册选择所在城市的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 在idea中为注释标记作者日期操作

    在idea中为注释标记作者日期操作

    这篇文章主要介绍了在idea中为注释标记作者日期操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 详解java中controller层是干什么的

    详解java中controller层是干什么的

    Controller一般指的是MVC架构里的控制层,是对项目里的功能做统一的调度,下面这篇文章主要给大家介绍了关于java中controller层是干什么的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • java排序去重示例分享

    java排序去重示例分享

    这篇文章主要介绍了java排序去重示例,对String strs = "ZZZ BBB AAA OOO ZZZ AAA ZZZ"计算出现个数,排序去重,需要的朋友可以参考下
    2014-02-02

最新评论