JAVA研发面试题(基础)序列化,远程方法调用

本文深入探讨Java序列化机制,包括序列化的应用场景、实现方式及序列化接口的使用。讲解了对象如何通过序列化进行持久存储及网络传输,并对比了Serializable与Externalizable的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA研发面试题(基础)

JAVA基础(目录):
Object类的方法,逐个解释一下(clone,hashCode,equals,wait,finalize,notify)
Java的Exception类型 
Integer和int有啥区别,integer中有哪些特殊的函数?
说一下String实现 intern 
final 关键字 
序列化,远程方法调用

序列化
因为有时需要将对象存储下来,或者要在网络上传输,需要进行对象的序列化和反序列化
序列化只会保存不被临时关键字transient修饰的,属于实例对象的属性(静态变量不保存)
序列化的类需要实现Serializable接口

Java 对象的序列化和反序列化 的两种应用场景

有时候需要将 Java 对象保存永久保存,比如保存到文件中,过程:Java 对象 -> IO 对象流 -> 写入文件 -> 字符串。当我们需要将文档中的字符串恢复为 Java 对象的时候,需要相反的过程:字符串 -> 读文件 -> IO 流 -> (强制)转化为 Java 对象
还有一种场景,在网络通信中,对象要先变为IO流经过网络传输之后,再被还原为Java对象。过程:对象 -> 写IO -> 读IO -> 对象。

序列化是一个处理对象信息的过程

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。
反序列化是将传输信息恢复为对象的过程。

Java 对象被序列化的两种方式

方式一:Java 对象所属的类需要直接或者间接实现 Serializable 接口
方式二:Java 对象所属的类需要直接或者间接实现 Externalizable接口。这里需要注意,如果通过继承实现Externalizable接口,必须覆盖重写 writeExternal 和 readExternal 方法,否则子类新增属性无法参与序列化。

Serializable 和 Externalizable 的区别

Serializable 可以是间接或者直接实现,所在类的属性都会被序列化。
Serializable 的思路是,如果没有特殊,本类以及子类的属性将参与序列化。
Externalizable 也可以是间接实现或者直接实现,但是其参与序列化和反序列化的属性都需要通过重写方法去指定

Model m=new Model();
m.setUserName("jecket");
m.setPassword("123456");
m.setOther("other");
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(filePath));
oos.writeObject(m);
oos.close();
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(filePath));
Model m=(Model)ois.readObject();
System.out.println(m.getUserName());‘

参考:https://blog.youkuaiyun.com/bestcxx/article/details/79425136

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值