发布于: 2020-1-12最后更新: 2023-9-4字数 00 分钟

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变量读回来
notion image
我们看一下这个test.txt文件里的内容,可以看到部分明文内容,jjjava.User类,属性id以及username还有他俩的值
notion image
 

Loading...
Jelastic容器云初使用及部署MySql主从

🗒️Jelastic容器云初使用及部署MySql主从


SpringMVC添加Token验证并Redis持久化

🗒️SpringMVC添加Token验证并Redis持久化

公告
🎉欢迎来到我的小窝~~~