当前位置:  编程技术>java/j2ee

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

    来源: 互联网  发布时间:2014-11-03

    本文导语:  默认格式 代码如下:public class MyClass implements Serializable{...} 序列化: 代码如下:ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(outputPath)); output.writeObject(myObject); 反序列化: 代码如下:ObjectInputStream input = new ObjectInputStream(ne...

默认格式

代码如下:

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 animals;

    public Zoo() {
        animals = new ArrayList();
    }

    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);
    }
}


    
 
 

您可能感兴趣的文章:

  • java将类序列化并存储到mysql(使用hibernate)
  • java序列化和java反序列化示例
  • java序列化实现Serializable接口
  • java 基本类型或可序列化类型,这里说的可序列化类型是什么意思???具体都有哪些类型??谢谢
  • Java 序列化库 JID
  • Java对象序列化和反序列化工具 Xson
  • Java对象序列化框架 Kryo
  • Java序列化类库 protostuff
  • 请教java在序列化时的中文问题?
  • 在java中如何序列化
  • Java 快速序列化库 FST
  • java序列化问题(求救,高手在哪里)
  • 深入理解Java对象的序列化与反序列化的应用
  • java教程之对象序列化使用基础示例详解
  • java 序列化对象 serializable 读写数据的实例
  • 基于序列化存取实现java对象深度克隆的方法详解
  • Java序列化机制与原理的深入分析
  • *** 高分, 请问在Java (Application) 中如何取硬盘的序列号??? ***
  • Java是否有能够将经过quoted-printable编码的字符序列转换为原文的函数?
  • java生成申请单序列号的实现方法
  • java菜菜鸟提问之二:我想下载个jbuilder,哪儿有,我找到的都没序列号。
  • 请问哪里有破解的JAVA BUILDER可以下载?或者合法的TRIAL序列号!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print类docflavor的类成员方法:服务格式化打印数据定义及介绍
  • java格式化数值成货币格式示例
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 高手请进!请教java把TXT或XML或PDF格式的文档转换成word格式文档的问题
  • Java读写包括中文的txt文件时不同编码格式问题解决
  • JAVA支持的声音和图象的格式太少了,
  • 求助:用java如何编写生成pdf格式报表的程序?
  • 用记事本写的程序为什么不能转化成java格式的
  • Java 源代码格式化工具 Jalopy
  • java格式化时间示例
  • 哪儿有chm格式的java电子书?
  • 请问Java支持什么声音文件格式?
  • 有谁知道怎样查看或解压扩展名为 .001(.002,.003等)我有JAVA文章是那个格式的
  • VCard格式读写的Java类库 cardme
  • 怎样将sql格式为yyyy-MM-dd hh:mm:ss的时间转化为java.util.Date或者java的long数据类型
  • 如何在java下截取桌面图像存为jpg格式?
  • winrar解压的java电子书为什么是“***.pdb”,pdb是什么格式?
  • 哪为做过读取PDF格式文件的JAVA程序
  • 求pdf格式的java书籍,给高分!!!
  • 怎么用java script判断是用户输入的字符串内容是正确的日期格式
  • Java 的函数参考有没有chm格式的???
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3