两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

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


ObjectInputStream和ObjectOutputStream類的構(gòu)造方法如下:

1)ObjectInputStream(InputStream in)

2)ObjectOutputStream(OutputStream out)


ObjectOutputStream的指向應(yīng)當是一個輸出流對象,因此當準備將一個對象寫入到文件時,首先用OutputStream的子類創(chuàng)建一個輸出流。


例如,用FileOutputStream創(chuàng)建一個文件輸出流,代碼如下:

FileOutputStream fileOut = new FileOutputStream("tom.txt");
ObjectOutputStream objectout = new ObjectOutputStream(fileOut);


同樣ObjectInputStream的指向應(yīng)當是一個輸入流對象,因此當準備從文件中讀入一個對象到程序中時,首先用InputStream的子類創(chuàng)建一個輸入流。


例如,用FileInputStream創(chuàng)建一個文件輸入流,代碼如下:

FileInputStream fileIn = new FileInputStream("tom.txt");
ObjectInputStream objectIn = new ObjectInputStream(fileIn);


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


一個類如果實現(xiàn)了Serializable接口(java.io包中的接口),那么這個類創(chuàng)建的對象就是所謂序列化的對象。Java類庫提供的絕大多數(shù)對象都是所謂序列化的。需要強調(diào)的是,Serializable接口中沒有方法,因此實現(xiàn)該接口的類不需要實現(xiàn)額外的方法。另外需要注意的是,使用對象流把一個對象寫入到文件時不僅要保證該對象是序列化的,而且該對象的成員對象也必須是序列化的。


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


例如,使用對象流讀寫TV類創(chuàng)建的對象:

TV.java

import java.io.*;
public class TV implements Serializable {
    String name;
    int price;
    public void setName(String s) {
        name = s;
    }
    public void setPrice(int n) {
        price = n;
    }
    public String getName() {
        return name;
    }
    public int getPrice() {
        return price;
    }
}

Main.java

import java.io.*;
public class Main {
    public static void main(String args[]) {
        TV changhong = new TV();
        changhong.setName("長虹電視");
        changhong.setPrice(5678);
        File file = new File("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(ClassNotFoundException event) {
            System.out.println("不能讀出對象");
        }
        catch(IOException event) {
            System.out.println(event);
        }
    }
}


點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

Dotcpp在線編譯      (登錄可減少運行等待時間)