type
status
date
slug
summary
tags
category
icon
password
ext
order
comment
什么是JavaBean
最简单的说法
一个类,实现了Serializable接口,而且类中属性都是private,而且每个属性都有对应的get/set方法,那他就是一个JavaBean。
详细点的说法
JavaBean仅仅是一个标准,所有的属性都是private,只使用对应的getters/setters来获取设置值,有一个无参构造函数,实现Serializable接口,这个 Serializable 接口是相当重要的,后面会详细说一下,下面放一下一个符合JavaBean标准的类
什么是Serializable接口
首先放一段官方的说明:一个类如果实现了 java.io.Serializable 接口,那么他就可以被序列化,反之,则不能,所有Serializable的子类都可以被序列化,而Serializable接口没有任何方法和字段,仅仅是一个含义,可以看一下他的代码
为什么使用Serializable
首先,最重要的一点,就是使得对象可以被转换为一组byte,存储在任意地方,而你使用时,通过这一组byte就可以重新拿到这个对象,也就是持久化,还有是可以转成JSON字符串,存储在任意地方,然后用时再序列化回来就行。
其次,就是传输对象,假如你某个对象想发送到另一个应用程序中,或者网络传输过去,如果对象不能序列化你该怎么传送?总不能手动转成固定格式字符串,然后转字节再传送,对方拿到后再按照格式分析创建对应的对象吧?也太麻烦了。
而且对象中,某些属性是引用类型的话,又是一个对象,这如何自己去解析那也就太麻烦了
序列化的注意事项
- 当一个对象被序列化时,只保存对象的非静态成员变量(包括声明为private的变量),不能保存任何的成员方法和静态的成员变量。
- 如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被序列化。
- 如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient,那么对象仍然可以序列化。
什么情况下需要序列化
- 当你想把的内存中的对象保存到一个文件中或者数据库中时候
- 当你想用套接字在网络上传送对象的时候
- 当你想通过RMI传输对象的时候
实践一把
我们将一个对象,以及一个整数序列化后写入到文件中,然后再读取出来,下面放Idea的调试图
可以看到,先用ObjetOutputStream将User对象以及一个int变量写入到文件中,然后再用ObjectInputStream将这个User对象和int变量读回来
我们看一下这个test.txt文件里的内容,可以看到部分明文内容,jjjava.User类,属性id以及username还有他俩的值
- 作者:Loneking
- 链接:https://loneking.cn/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/87
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。