自定义序列化和反序列化的java实现

package j2se.IO;

import java.io.*;

/**
 * Created by jingqing.zhou on 2015/6/12.
 * ByteArrayOutputStream :可以捕获内存缓冲区的数据,转换成字节数组。
 * DataInputStream&DataOutputStream关心如何将数据从高层次的形式转化成低层次的形式.
 * FileInputStream&FileOutputStream关心如何操作存储单元以接受和产生数据。
 */
public class ByteArrayIO {
    //序列化对象为String字符串,先对序列化后的结果进行BASE64编码,否则不能直接进行反序列化
    public static String writeObject(Object o) throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(o);
        oos.flush();
        oos.close();
        bos.close();
        //return new BASE64Encoder().encode(bos.toByteArray());
        return new String(bos.toByteArray(), "ISO-8859-1");
    }

    //反序列化String字符串为对象

    public static Object readObject(String object) throws Exception{
        //ByteArrayInputStream bis = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(object));
        ByteArrayInputStream bis = new ByteArrayInputStream(object.getBytes("ISO-8859-1"));
        ObjectInputStream ois = new ObjectInputStream(bis);
        Object o = null;
        try {
            o = ois.readObject();
        } catch(EOFException e) {
            System.err.print("read finished");
        }
        bis.close();
        ois.close();
        return o;
    }

}
时间: 2024-10-09 02:53:18

自定义序列化和反序列化的java实现的相关文章

如何自定义序列化和反序列化

分析问题 在其他很多编程语言(比如C++)中,实现序列化和反序列化的过程往往需要程序员手动地编写代码.而.NET中提供的Serializable特性却帮助程序员非常便捷地申明一个可序列化的类型.但是,便捷的同时往往意味着缺乏灵活性.很多时候,由于业务逻辑的要求,程序员往往需要主动地控制序列化和反序列化的过程,.NET提供了ISerializable接口来满足自定义序列化需求. 为了实现自定义的序列化和反序列化,程序员需要实现ISerializable接口,并且提供一个特定的在反序列化中构造对象的

c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c#中的类模型结构是相对应的,我们是否可以在序列化一个对象时候,让我们json的数据结构能按照自己的意愿,而不必与该对象的数据结构一样呢?,比如说,一个对象,只有一个名为"ID"的int类型的属性,值为1,如果序列化该对象,则能得到json:{"ID":1},但我现在希望得到的json的"ID"值是bool类型:{"ID":t

xstream实现对象的序列化和反序列化(Java)

概述 最新整理Java方面XML序列化和反序列化的常用工具类,找到了dom4j和xstream.dom4j相对小巧,很好的解读xml:但是对于对象的xml序列化和反序列化,我还是比较喜欢xsteam(ps:个人爱好吧),这里整理xstream的入门基础知识: 使用 引用maven内容 <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifac

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口

深入分析Java的序列化与反序列化

阅读目录 Java对象的序列化如何对Java对象进行序列化与反序列化序列化及反序列化相关知识ArrayList的序列化ObjectOutputStream总结 序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么自定义序列化策略 自定义的序列化策略是如何被调

24 Java学习之对象序列化和反序列化

一. 序列化和反序列化的概念 对象序列化:把对象转换为字节序列的过程 对象反序列化:把字节序列恢复为对象的过程 1. 为何要进行序列化 我们知道当虚拟机停止运行之后,内存中的对象就会消失.在很多应用中,需要对某些对象进行序列化,让他们离开内存空间,进入物理硬盘,便于长期保存.例如,最常见的是WEB服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些Session先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原

夯实Java基础系列22:一文读懂Java序列化和反序列化

本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文参考 http://www.importnew.com/17964.html和 https://www.ibm.com/developerworks/cn/java/j-lo-serial/ 序列化与反序列化概念 序列化 (S

Java对象序列化和反序列化

Java对象序列化和反序列化 在Java中,我们如果要保存一个对象的瞬时状态值,以便在下次使用时能够得到这些值,或者持久化对象,或者使用RMI(远程方法调用),或在网络中传递对象时,此时我们就需要将对象序列化,实现序列化,我们只要实现Serializable接口,该接口是一个标记接口(Tag interface),即里面没有方法,其主要作用就是告诉JVM该类的对象可以进行序列化. 一般来说,很多类的对象都实现了Serializable接口,但是,有些对象是不能进行序列化的,比如与数据库相关的连接

Java 中序列化与反序列化引发的思考?

java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据库的本质又是什么呢? 一.从硬件说起 核心五部分:运算器.控制器.存储器.输入设备.输出设备 根据冯诺伊曼计算机原理,计算机除了五部分外,存储用于存放指令与数据,运算器完成算数与逻辑运算,外部人员通过输入/输出设备操作计算机,且计算机内部是使用二进制表示指令与数据. 其中指定由操作码和地址吗构成,操