歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 對象流的簡單使用

對象的輸入輸出流的作用: 用於寫入對象 的信息和讀取對象的信息。 使得對象持久化。

ObjectInputStream  : 對象輸入流

ObjectOutPutStream  :對象輸出流

簡單的實例

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

//創建要寫入磁盤的類,這個類需要實現接口 Serializable(可系列化的)
class Student implements Serializable{
   
    // 在這裡保證了serialVersionUID 的唯一性,防止屬性變量的臨時改變,從而造成寫入id與讀取id不同
    private static final long serialVersionUID = 1L;
    int id ; //額外需要添加一個屬性
   
    String name ;
    transient String sex; //transient修飾屬性,表示暫時的,則這個屬性不會被寫入磁盤
    transient int age;
   
    public Student(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}


public class objectIO {

    /**
    * @param args
    * @throws IOException
    * @throws ClassNotFoundException
    */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // TODO Auto-generated method stub

        createObj();
        readObj();
    }
   
    //(一)先寫入對象
    public static void createObj() throws IOException {
        //1.創建目標路徑
        File file = new File("C:\\Users\\bigerf\\Desktop\\objTest.txt");
        //2.創建流通道
        FileOutputStream fos = new FileOutputStream(file);
        //3.創建對象輸出流
        ObjectOutputStream objOP = new ObjectOutputStream(fos);
        //4.創建類對象,並初始化
        Student stu = new Student("瑪麗蘇", "男", 18);
        //5.向目標路徑文件寫入對象
        objOP.writeObject(stu);
        //6.關閉資源
        objOP.close();
    }
   
    //再讀取對象
    public static void readObj() throws IOException, ClassNotFoundException {
        File file = new File("C:\\Users\\bigerf\\Desktop\\objTest.txt");
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream objIP = new ObjectInputStream(fis);
        //讀取對象數據,需要將對象流強制轉換為 要寫入對象的類型
        Student stu = (Student)objIP.readObject();
        System.out.println("\n name:"+stu.name+"\n sex:"+stu.sex+"\n age:"+stu.age);
        objIP.close(); 
    }

}

打印效果

 name:瑪麗蘇
 sex:null       //後面的這連個屬性使用了 transient修飾   
 age:0

用到方法:writeObject(Object o);  //向磁盤寫入對象

     readObject();  //讀取磁盤的對象,注意這裡需要強制類型

對象輸入輸出流的使用注意點:
      1.如果想將一個對象寫入到磁盤中,那麼對象所屬的類必須要進行序列化,實現Serializable 接口,Serializable接口沒有任何方法 ,是一個標記接口
      2.如果對象所屬的類的成員變量發生改變,你在讀取原來的對象是就會報錯,如果想要解決報錯,保證serialVersionUID是唯一。
      3.如果你不想將某些信息存入到磁盤 就可以同過transient關鍵字修飾成員變量
      4.如果一個類中引用了另外的一個類,那麼另外的這個類也要實現Serializable接口。

如果:

  

Copyright © Linux教程網 All Rights Reserved