`
BradyZhu
  • 浏览: 246798 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

实现Serializable接口的可控制序列化实现

 
阅读更多

实现序列化接口Serializable也可以控制对变量和transient变量的序列化控制,请看代码

package com.bird.thinking;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
 * @use 实现Serializable接口的可控制序列化实现
 * @author Bird
 *
 */
public class SerialCtl implements Serializable {
	private static final long serialVersionUID = 1L;
	private String a;
	private transient String b;//注意其为transient
	public SerialCtl(String aa, String bb){
		a = "Not Transient : " + aa;
		b = "Transient :" + bb;
	}
	
	public String toString(){
		return a + "\n" + b;
	}
	
	private void writeObject(ObjectOutputStream stream) throws Exception{
		stream.defaultWriteObject();//调用原来的方法写入非transient变量
		stream.writeObject(b);//自己写方法序列化transient变量
	}
	
	private void readObject(ObjectInputStream stream) throws Exception{
		stream.defaultReadObject();//默认读取非transient变量
		b = (String) stream.readObject();
	}
	
	
	public static void main(String[] args) throws Exception{
		SerialCtl sc = new SerialCtl("test1", "Test2");
		System.out.println("Before:\n" + sc);
		ByteArrayOutputStream buf = new ByteArrayOutputStream();
		ObjectOutputStream  o = new ObjectOutputStream(buf);
		o.writeObject(sc);
		Thread.sleep(500);
		//现在要反序列化了哦
		ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));
		SerialCtl sc2 = (SerialCtl) in.readObject();
		System.out.println("After:\n" + sc2);
	}
}

运行结果为

Before:
Not Transient : test1
Transient :Test2
After:
Not Transient : test1
Transient :Test2
可以发现,transient变量照样被序列化和反序列化了
分享到:
评论

相关推荐

    Java 对象序列化详解以及实例实现和源码下载

    Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...

    什么是Java的序列化和反序列化?如何实现对象的序列化和反序列化?(java面试题附答案).txt

    通过实现 Serializable 接口,Java对象可以被序列化和反序列化。序列化可以将对象转换为字节流,以便于存储或传输。反序列化则可以将字节流重新转换为原始对象。需要注意的是,序列化和反序列化的类必须具有相同的 ...

    深入探索Java对象的序列化

    要序列化的对象应该实现Serializable接口。 Serializable接口是一个标识接口,没有抽象方法。 Serializable有一个子接口Externalizable,实现Externalizable接口的类可以自行控制对象序列化荷反序列化过程。 ...

    可序列化接口Serializable

    NULL 博文链接:https://tony-lee-s.iteye.com/blog/1416044

    Java中的序列化与反序列化.pdf

    Serializable接口和Externalizable接口实现序列化和反序列化

    Java_serialization_doc.rar_Serializable _doc_序列化

    Java中对象的序列化(serialization)允许把采用Serializable接口的任何对象转换成字节流序列;同时它也允许把字节流序列转换回对象本身。其机制不依赖于操作系统,也就是说,你可以通过网络传递该对象,并在网络...

    C#自定义序列化ISerializable的实现方法

    主要介绍了C#自定义序列化ISerializable的实现方法,涉及C#序列化的操作技巧,非常具有实用价值,需要的朋友可以参考下

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

     为什么实现了java.io.Serializable接口才能被序列化  transient的作用是什么  怎么自定义序列化策略  自定义的序列化策略是如何被调用的  ArrayList对序列化的实现有什么好处  Java对象的序列化  ...

    解析Android中的Serializable序列化

    1、为何要序列化? — 把内存中的java对象能够在磁盘上持久保存 — 通过网络传输对象 ...在java里只需让目标类实现Serializable接口,无须实现任何方法。Serializable接口是一种标记接口,用来标明

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    一个类一旦实现了Serializable接口,那么该类的对象就是可序列化的。实现类的对象的序列化可以使用ObjectOutputStream,实现步骤如下: 创建ObjectOutputStream对象; 调用ObjectOutputStream的writeObject方法输出...

    java序列化深度探讨

    对象序列化就是把对象写入到输出流中,用来存储或者传输。 对象的反序列化就是从输入流中读取对象。... 要序列化的对象应该实现Serializable接口。 Serializable接口是一个标识接口,没有抽象方法。

    java序列化和反序列化,面试必备

    最近阅读Serializable接口和Externalizable接口的源码,并结合了一些资料,对面试过程中与序列化相关的内容做了一些总结。 一、序列化、反序列化、使用场景、意义。 序列化:将对象写入IO流中; 反序列化:从IO流中...

    PHP自定义序列化接口Serializable用法分析

    主要介绍了PHP自定义序列化接口Serializable用法,结合实例形式分析了Serializable自定义序列化接口的概念、功能、定义及使用方法,需要的朋友可以参考下

    Android中的序列化浅析

    在Android系统中关于序列化的方法一般有两种,分别是实现Serializable接口和Parcelable接口,其中Serializable接口是来自Java中的序列化接口,而Parcelable是Android自带的序列化接口。 上述的两种序列化接口都有各自...

    xml的序列化与验证

    1、xml序列化的Java3种实现方法 1)Serializable和Externalizable接口Xstream框架2)Simple框架 3)Apache的AXIOM框架 2、XML验证文档的生成工具 trang.jar 3、利用XSD文件的XML3种验证方法 1)Dom4j的SAXValidator ...

    XStream <--> Java 对象序列化为 XML 互换

    使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。 和其他序列化工具相比,XStream 有三个...

    Java序列化与反序列化三种格式存取

     一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。...

    3分钟读阿里Java手册: 序列化

    前言 下面这句代码,相信大家可能跟我一样都非常熟悉,但是真正了解的人又有多少呢?...Java类通过实现Serializable接口实现该类对象的序列化。Java序列化保留了对象类的元数据(类、继承类等),以及对象数据,兼容性好

    JAVA基础,常见java基础问题.rar

    2.接口和抽象类有什么区别 接口不能有方法实现,也就是说接口的方法都是抽象方法,但抽象类可以有方法实现。...序列化的实现一般是通过实现Serializable接口,并且会有一个serialVersionUID,这个ID叫做序列化ID

    知识整理和序列化

    知识整理 知识导图 Object ...常用API ...其他常用 String Math 和 System ...如果一个类需要进行序列化,需要遵从Serializable 接口,得到一个序列化编号。 public class Person implements Serializable { /

Global site tag (gtag.js) - Google Analytics