java對象流(一)


注意:字節數組流是可以不用關閉的(字符數組流要不要關閉暫時不清楚)。

對象流的讀數據和寫數據方法分別是writeObject(Object o)和readObject(Object o)。

ObjectInputStream和ObjectOutputStream類分別是InputStream和OutputStream類的子類。ObjectInputStream和ObjectOutputStream類創建的對象稱為輸入流和對象輸出流,對象輸出流使用writeObject(Object obj)方法將一個對象obj寫入到一個文件,對象輸入流使用readObject()讀取一個對象到程序中。

ObjectInputStream和ObjectOutputStream類的構造方法如下。

  • ObjectInputStream(InputStream in)
  • ObjectOutputStream(OutputStream out)

ObjectOutputStream的指向應當是一個輸出流對象,因此當准備將一個對象寫入到文件時,首先用OutputStream的子類創建一個輸出流。例如:

FileOutputStream fileOut = new FileOutputStream(file);//對於對象流而言,這應該是底層流
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);

同樣ObjectInputStream的指向應當是一個輸入流對象,因此當准備從文件中讀入一個對象到程序中時,首先用InputStream的子類創建一個輸入流,例如用FileInputStream創建一個文件輸入流,如下所示:

FileInputStream fileIn = new FileInputStream(file);
ObjectInputStream objectIn = new ObjectInputStream(fileIn);

當使用對象流寫入或讀入對象時,要保證對象是序列化的,這是為了保證能把對象寫入到文件,並能再把對象正確讀回到程序中。

 一個類如果實現了Serializable接口(java.io包中的接口),那么這個類創建的對象流是所謂序列化的對象。

Java類庫提供的絕大多數對象都是所謂序列化的。Serializable接口中沒有方法,因此實現該接口的類不需要實現額外的方法。使用對象流把一個對象寫入到文件時不僅要保證該對象是序列化的,而且該對象的成員對象也必須是序列化的。

Serializable接口中的方法對程序是不可見的,因此實現該接口的類不需要實現額外的方法,當把一個序列化的對象寫入到對象輸出流時,JVM就會實現Serializable接口中的方法,將一定格式的文本(對象的序列化信息)寫入到目的地。當ObjectInputStream對象流從文件讀取對象時,就會從文件中讀回對象的序列化信息,並根據對象的序列化信息創建一個對象。

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


public class Test03 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TV changhong = new TV();
        changhong.setName("changhongTV");
        changhong.setPrice(5678);
        File file = new File("E:/test/television.txt");
        try {
            FileOutputStream fileOut = new FileOutputStream(file);//對於對象流而言,這應該是底層流
            ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(changhong);
            objectOut.close();
            
            FileInputStream fileIn = new FileInputStream(file);
            ObjectInputStream objectIn = new ObjectInputStream(fileIn);
            TV xinfei = (TV)objectIn.readObject();
            objectIn.close();
            
            xinfei.setName("新飛電視");
            xinfei.setPrice(6666);
            System.out.println("changhong的名字:" + changhong.getName());
            System.out.println("changhong的價格:" + changhong.getPrice());
            System.out.println("xinfei的名字:" + xinfei.getName());
            System.out.println("xinfei的價格:" + xinfei.getPrice());
            
        } 
        catch (IOException e) {} 
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            System.out.println("不能輸出對象");
        }
    }

}

將對象的信息寫入文件television.txt,然后用ObjectOutputStream對象取出數據並顯示。

程序運行之后,結果如下所示:

TV.java如下所示,TV類時要實現Serializable接口的。

import java.io.Serializable;

public class TV implements Serializable{
    String name;
    int price;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM