废话不多说,马上开始。
将一个对象的状态写如一个byte流里,并可以到其它地方读取这个byte流的数据,重新构造一个相同的对象。此乃java的序列化。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久到DB,文件中。是RMI,EJB,JNDI等的基础技术。
如何序列化?
只有实现了java.io.Serializable接口的类才能被序列化!
那么如何实现序列化对象的持久化呢?
如果要把一个可序列化的对象序列化到文件或者数据库中,需要java.io.ObjectOutputStream的支持,例子如下:
FileOutputStream fos = new FileOutputStream(args[0]);
ObjectOutputStream oos = new ObjectOutputStream(fos);
ClassA c = new ClassA();
oos.writeObject(c);
当对象不能被序列化时,会抛出java.io.NotSerializableException。
恢复一个对象:
java.io.ObjectInputStream
FileInputStream fis = new FileInputStream(args[0]);
ObjectInputStream ois = new ObjectInputStream(fis);
Object O = ois.readObject();
序列化的原则:
并不是实现序列化的类中所有的属性和方法都可以被自动的序列化。
1.父类没有实现序列化,子类序列化时,继承父类的属性和方法则不会被序列化。
2.static类型不能被序列化。 why?
3.transient关键字修饰的属性和方法不能被序列化。因此有时候有些属性或方法不想被序列化时,可以用transient将其限制。
那么一般什么属性最好不要被序列化呢?
1.线程的相关属性。
2.要访问IO,本地资源,网络资源的属性。
3.没有实现序列化的属性
既没有实现序列化,又没有用transient标识的,会抛出NotSerializableException。
说到这里序列化基本的知识其实也差不多了,但是序列化还远远不仅仅如此!序列化真正的运用当中还有很多东西,但是因为涉及到虚拟机方面知识,而这些我又不甚了解,所以更多的东西还没有办法记录下来了,以后要用的时候再学把。
分享到:
相关推荐
Java序列化是Java平台提供的一种持久化机制,它允许我们将一个Java对象转换为字节流,以便存储到磁盘上,或者通过网络进行传输。这使得我们可以保存和恢复对象的状态。实现序列化的类需要实现`Serializable`接口,...
Java中的序列化是一种将对象的状态转化为可存储或可传输的形式的技术。这主要涉及到将对象转换为字节流,以便可以在网络上发送,或者保存到文件系统中,之后再通过反序列化恢复为原来的对象状态。序列化对于实现跨...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...
7. **@Transient**: 在Java序列化中,用transient修饰的变量不会被序列化,表明这个字段不是对象持久状态的一部分,不应该随着对象一起存储或传输。 8. **@JoinColumn**: 在JPA中,这个注解用于定义一对一或一对多...
学习笔记会讲解如何使用反射进行元编程,以及其在插件系统、序列化和动态代理中的应用。 9. **Java API和库**:Java标准库提供了大量的预定义类和接口,如JDBC(Java数据库连接)用于数据库操作,Swing和JavaFX用于...
6. **输入/输出流**:Java提供了强大的I/O流系统,支持文件读写、网络通信和数据序列化等操作,如FileInputStream和FileOutputStream用于文件操作,Socket和ServerSocket用于网络编程。 7. **多线程**:Java内置了...
5. **IO流**:阐述了Java I/O流的分类、层次结构以及常用类的用法,包括字符流和字节流、输入流和输出流、缓冲流以及对象序列化。 6. **集合框架**:详述ArrayList、LinkedList、Vector、HashSet、HashMap等集合类...
《林信良Java学习笔记》是一本深受程序员喜爱的Java学习资源,尤其因其繁体字版,对于中文读者来说,提供了更为亲切的阅读体验。这本书深入浅出地讲解了Java编程语言的基础知识和高级特性,旨在帮助初学者快速掌握...
【JAVA学习笔记】是一份专为Java初学者设计的学习资源,包含了从基础知识到进阶概念的全面讲解。PDF版的格式使得学习者可以方便地在各种设备上阅读和打印,随时随地提升自己的Java技能。 这份笔记可能涵盖了以下几...
Java提供了丰富的IO流API,包括文件操作、流的读写、对象序列化等。笔记会详细讲解字节流和字符流的区别,以及缓冲流、对象流和转换流的用法。 在网络编程方面,Java提供Socket编程接口,可以创建客户端和服务端...
【良葛格Java学习笔记】 本笔记主要涵盖了Java编程语言的核心概念和技术,旨在帮助初学者以及有一定基础的开发者深入理解并掌握Java。Java作为一种广泛应用于企业级应用开发、移动开发(尤其是Android)以及大数据...
6. **I/O流**:掌握Java I/O流的概念,了解字节流、字符流的区别,学习InputStream、OutputStream、Reader、Writer四大类流的使用,以及文件操作、对象序列化和缓冲流的应用。 7. **多线程**:理解Java多线程编程,...
【毕向东Java经典学习笔记Word版】是一份深入讲解Java编程语言的学习资料,由知名IT教育专家毕向东编撰。这份笔记以其系统性、实践性和深度广度深受Java初学者和进阶者的喜爱。毕向东作为Java教育领域的权威人士,他...
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
Java精华学习笔记主要涵盖了Java编程语言的核心概念、关键特性以及实战技巧。这些笔记是作者在深入学习Java过程中积累的经验总结,旨在帮助初学者快速理解和掌握Java编程。 1. **Java基础** - **数据类型**: Java...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
这份"个人Java学习过程中所有学习笔记"包含了作者在学习Java时积累的宝贵经验,旨在帮助初学者或有经验的程序员巩固基础,提升技能。 笔记内容可能涵盖以下几个主要部分: 1. **Java基础**:这部分通常包括Java的...
而“【笔记】序列化和反序列化.docx”可能包含作者对学习过程的总结和心得,对于深入理解这些概念很有帮助。“01预习资料.docx”可能提供了基本的概念介绍,是学习序列化和反序列化的好起点。 总的来说,序列化和反...