关于Serializable的用法,为什么要实现Serializable?对象为什么要序列化
来源:互联网 发布:迪优美特i5网络机顶盒 编辑:程序博客网 时间:2024/04/20 10:10
实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化。比如一些MQ应用中,一般做法就会将对象进行序列化处理
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。
什么情况下需要序列化
a)当你想把的内存中的对象写入到硬盘的时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
再稍微解释一下:a)比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;
b)在进行java的Socket编程的时候,你有时候可能要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。
c)如果要通过远程的方法调用(RMI)去调用一个远程对象的方法,如在计算机A中调用另一台计算机B的对象的方法,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,就需要实现序列化接口。
总结一下: 序列化的作用就是为了不同jvm之间共享实例对象的一种解决方案.由java提供此机制,效率之高,是其他解决方案无法比拟的
举个例子:
//枚举类也是实现了Serializable接口,所以枚举对象都是默认可以被序列化的
public enum Gender {MALE,FEMALE}
//Person对象实现序列化并重写toString为了打印public class Person implements Serializable{private String name;private int age;private Gender gender;public String getName() {return name;}public Person(){System.out.println("none-arg constructor");}public Person(String name, int age, Gender gender){System.out.println("arg constructor");this.name = name;this.age = age;this.gender = gender;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Gender getGender() {return gender;}public void setGender(Gender gender) {this.gender = gender;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";}}
//SimpleSerial是一个简单的序列化程序,它先将一个Person对象保存到文件person.out中,//然后再从该文件中读出被存储的Person对象,并打印该对象。public class SimpleSerial {public static void main(String[] args) throws Exception {File file = new File("Person.out");ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file)); Person person = new Person("John", 101, Gender.MALE); oout.writeObject(person); oout.close(); ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file)); Object newPerson = oin.readObject(); oin.close(); System.out.println(newPerson);}}
- 关于Serializable的用法,为什么要实现Serializable?对象为什么要序列化
- 为什么要实现序列化接口Serializable
- 为什么要实现Serializable
- 为什么要实现Serializable
- 为什么要实现Serializable
- 为什么要实现Serializable
- 为什么要实现Serializable
- javaBean为什么要实现序列化 Serializable接口?
- javaBean为什么要实现 序列化 Serializable接口?
- javaBean为什么要实现 序列化 Serializable接口?
- 为什么实体类要实现serializable接口 序列化
- JAVA 源码浅解析之为什么对象序列化要实现Serializable接口
- 为什么要实现serializable接口
- javaBean为什么要实现Serializable接口?
- Hibernate POJO为什么要实现Serializable接口
- javaBean为什么要实现Serializable接口?
- Hibernate POJO为什么要实现Serializable接口
- Hibernate POJO为什么要实现Serializable接口
- java.lang.IllegalStateException: Fragment already active
- 圆桌问题
- 9.java内存泄漏(2)
- 理解ORM和数据持久化
- nginx:[emerg]unknown directive "ssl"
- 关于Serializable的用法,为什么要实现Serializable?对象为什么要序列化
- 搜索引擎学习(一):搜索引擎学习
- spring的@Transactional注解详细用法
- I2S音频总线学习(一)数字音频技术
- 代写演讲稿需要注意什么,如何代写演讲稿
- thinkPHP搜索内容回显问题
- ftp实现文件的上传和下载
- WINDOWS下如何安装GCC?
- Json或XML快速反序列化类(Visual Studio 2012以上)