对象流

 

 

ObjectInputStream 

ObjectOutputStream

 

用于存储读取基本数据类型数据或对象的处理流,他的强大之处就是可以吧java中的对象写入到数据源中,也能把对象从数据源中还原回来

 

序列化:用ObjectOutputStream类保存基本类型数据或对象的机制

反序列化:用ObjectInputStream类读取基本类型数据或对象的机制

 

ObjectOutputStream和ObjectInputStream不能序列化statictransient修饰的成员变量

 

对象的序列化机制:允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。

 

复制代码
 1 public class ObjectTest {
 2     @Test
 3     public void test(){
 4         ObjectOutputStream oos = null;
 5         try {
 6             //1.创建节点流(文件流)
 7             FileOutputStream fos = new FileOutputStream("object.txt");
 8             //2.创建对象流,实现序列化操作
 9             oos = new ObjectOutputStream(fos);
10             //3.调用 ObjectOutputStream 对象的 writeObject(对象) 方法输出可序列化对象
11             oos.writeObject(new String("对象流很简单!"));
12             //4.注意写出一次,操作flush()一次
13             oos.flush();
14         } catch (IOException e) {
15             e.printStackTrace();
16         } finally {
17             if (oos != null){
18                 //5.关闭流
19                 try {
20                     oos.close();
21                 } catch (IOException e) {
22                     e.printStackTrace();
23                 }
24             }
25         }
26     }
27 }
复制代码

 

复制代码
 1 public class ObjectTest {
 2     @Test
 3     public void test2(){
 4         ObjectInputStream ois = null;
 5         try {
 6             //1.创建节点输入流(FileInputStream)
 7             FileInputStream fis = new FileInputStream("object.txt");
 8             //2. 创建对象流(ObjectInputStream)
 9             ois = new ObjectInputStream(fis);
10             //3.调用 ObjectOutputStream 对象的 readObject() 方法输出可序列化对象
11             Object obj = ois.readObject();
12             String str = (String) obj;
13             System.out.println(str);
14         } catch (IOException e) {
15             e.printStackTrace();
16         } catch (ClassNotFoundException e) {
17             e.printStackTrace();
18         } finally {
19             //4.关闭流
20             try {
21                 ois.close();
22             } catch (IOException e) {
23                 e.printStackTrace();
24             }
25         }
26     }
27 }
复制代码

 

 

要想一个自定义类对象是可序列化的,该类需要满足以下要求:

  1.需要实现接口:Serializable

  2.需要当前类提供一个全局常量:serialVersionUID,   例如:

  

public static final long serialVersionUID = 475463534532L

 

  

  3.除了当前类需要实现Serializable接口之外,还必须保证其内部所有属性也必须是可序列化的。(默认情况下,基本数据类型可序列化)

 

posted @   草莓小甜心  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示