对象流

 

 

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 @ 2022-05-18 17:11  草莓小甜心  阅读(56)  评论(0)    收藏  举报