`
TRAMP_ZZY
  • 浏览: 133590 次
社区版块
存档分类
最新评论

Java 序列化(Serializable)机制

    博客分类:
  • Java
阅读更多
package com.bjfu.chapter11;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Box implements Serializable {

	private int width;
	private int height;
	
	public void setWidth(int width) {
		this.width = width;
	}
	
	public void setHeight(int height) {
		this.height = height;
	}
	
	@Override
	public String toString() {
		return "Box [width=" + width + ", height=" + height + "]";
	}

	public void readObjectFromFile() {
		
		FileInputStream fs = null;
		ObjectInputStream is = null;
		
		try {
			fs = new FileInputStream("foo.ser");
			is = new ObjectInputStream(fs);
			
			//每次调用readObject 都会从流出读出一个对象。
			//读取顺序与写入顺序相同。
			Box b = (Box) is.readObject();
			System.out.println(b);
			
			b = (Box) is.readObject();
			System.out.println(b);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
				fs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
	}
	public static void main(String[] args) {
		
		Box box = new Box();
		box.setWidth(50);
		box.setHeight(20);
		
		Box box1 = new Box();
		box1.setWidth(100);
		box1.setHeight(50);
		
		FileOutputStream fs = null;
		ObjectOutputStream os = null;
		
		try {
			fs = new FileOutputStream("foo.ser");
			os = new ObjectOutputStream(fs);
			//每次调用writeObject 都会向流出写入一个对象。
			os.writeObject(box);
			os.writeObject(box1);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		} finally {
			
			try {
				os.close();
				fs.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		new Box().readObjectFromFile();
	}

}

10. 序列化,将被序列化的对象写到文件中,然后就可以让你的程序去文件中读取序列化的对象并把它们展开到活生
	生的状态。

11. 将串流(stream)连接起来代表来源于目的地(文件或网络端口)的连接。串流必须要连接到某处才能算是个串流。
	对象被序列化的时候发生了什么?在堆上的对象有状态-实例变量的值。这些值让同一类的不同实例有不同的
	意义。
	序列化的对象保存了实例变量的值,因此之后可以在堆上带回一模一样的实例。
	当对象还带有对其他对象的引用怎么办?
	当对象被序列化时,被该对象引用的实例变量也会被序列化。且所有被引用的对象也会被序列化。最棒的是,
	这些操作都是自动进行的。

12. 如果要让类能够被序列化,就要实现 serializable 接口。序列化接口没有方法或字段,仅用于标识可序列化的语义。

13. 序列化是全有或全无的。不能够只有部分状态被正确保存下来。
	
14. 如果某实例变量不能或不应该被序列化,就把它标记为 transient (瞬时的)。
	class Chat implements Serializable {
		transient String currentID;
		String userName;
		
		//......
	}
	
15. 如果两个对象都有引用实例变量指向相同的对象会怎样?例如两个Cat 都有相同的 Owner 对象,Owner对象
	会被存储两次吗?
	序列化能够分辨两个对象是否相同。在此情况下,只有一个对象会被存储,其他引用会被复原成指向该对象。
	
16. 解序列化(Deserialization)时,如果找不到或无法加载被解的类时,Java 虚拟机会抛出异常。

17. 如果对象在继承树上有个不可序列化的祖先类,则该不可序列化类及在它之上的类的构造函数(就算是可序列化
	的也一样)就会执行。一旦构造函数连锁启动之后将无法停止。也就是说,从第一个不可序列化的父类开始,
	全部都会重新初始状态。
	
18. 静态变量不会被序列化,当对象被还原的时候,静态变量会维持类中原本的样子,而不是存储时的样子。

19. 如果父类实现序列化,则子类也就自动地有实现,而不管是否有明确的声明。
分享到:
评论

相关推荐

    java序列化(Serializable)的作用和反序列化.doc

    序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例...虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

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

    其中包括以下接口和类: java.io.Serializable java.io.Externalizable ObjectOutput ObjectInput ObjectOutputStream ObjectInputStream Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第7页。...

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

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

    24、序列化 Serializable1

    虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化3、如何实现序列化将

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

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

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

    意义:序列化机制允许将实现序列化的Java对象转换为字节序列,并将字节序列保存在磁盘中,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使地对象可以脱离程序的运行而独立存在。 使用场景:所有在网络上...

    Java_serialization_doc.rar_Serializable _doc_序列化

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

    java面试题进阶版附答案.docx

    六、序列化和反序列化:解释了Java中序列化和反序列化的概念,以及通过实现Serializable接口进行对象的序列化和反序列化的过程。 七、内部类和匿名类:介绍了Java中的内部类和匿名类的概念,包括不同类型的内部类...

    Dubbo服务框架面试题及答案.pdf

    Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数 据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。 多个短连接,TCP 协议传输,同步传输,适用常规的远程服务调用和 ...

    netty-JBoss-Marshalling:使用JBoss-marshalling编码包进行java的序列号编码

    相比于传统的Java序列化机制,它的优点如下: 可插拔的类解析器,提供更加便捷的类加载定制策略,通过一个接口即可实现定制; 可插拔的对象替换技术,不需要通过继承的方式; 可插拔的预定义类缓存表,可以减小序列...

    Serializable-master.zip

    1.serialVersionUID-->适用于Java的序列化机制: 2.具体化序列化过程: 3.serialVersionUID有两种显示的生成方式:

    Serializable-Learning:序列化

    常见的序列化方式一、Protocol BufferProtocol Buffers(也称protobuf)是Google公司设计的一种独立于开发语言,独立于平台的可扩展的结构化数据序列机制。通俗点来讲它跟xml和json是一类。是一种数据交互格式协议。...

    Dubbo简介.docx

    rmi : 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数 据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 ...

    Java面试资料之IO相关

    在 Java 中,能够被序列化的类必须先实现 Serializable 接口,该接口没有任何抽象方法只是起到一个标记作用。对象序列化可以将一个 Java 对象写入到文件中。例如: ```java public class Test { public static ...

    java名词汇总说明文档

    序列化(Serializable) 将对象写到流中并将其读回的过程 接口(interface) 只声明方法而不实现,数据成员必须初始化且不能更改的特殊类 抽象类(abstract class) 仅定义了方法的部分实现,而留待扩展类去提供这些方法...

    IPCDemo:Android IPC 机制学习 AIDL Messenger 通讯方式

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

    基于Java的XML解析与反射设计模式.doc

    使用xstream序列化的类不需要实现serializable接口。xstream是一种序列 化工具而不是数据绑定工具,就是说不能从xml或者xml schema definition (xsd)文件生成类。 和其他序列化工具相比,xstream 有三个突出的特点...

    agileway:提供Java,Web,各种类库增强,应避免996。目前已支持feign,redis,datasource,shiro,httpclient,rest,codec,serialize等

    支持基于Cbor序列化规范的实现 支持基于FSE序列化框架实现 支持基于FST序列化框架实现 支持基于hessian序列化框架实现 支持基于Jdk Serializable规范实现 支持基于easyjson,jackson实现 支持基于Kryo序列化框架实现...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java面试宝典-经典

    74、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的...

Global site tag (gtag.js) - Google Analytics