Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java ObjectInputStream 類

在本教程中,我們將借助示例學(xué)習(xí)Java ObjectOutputStream及其方法。

java.io包的ObjectInputStream類可用于讀取ObjectOutputStream先前編寫的對象。

它進行了InputStream抽象類。

Java ObjectInputStream類是Java InputStream的子類。

在學(xué)習(xí)ObjectInputStream類之前,請確保您了解ObjectOutputStream類。

ObjectInputStream的工作原理

ObjectInputStream主要用于讀取ObjectOutputStream寫入的數(shù)據(jù)。

基本上,ObjectOutputStream將Java對象轉(zhuǎn)換為相應(yīng)的流。 這稱為序列化。 這些轉(zhuǎn)換后的流可以存儲在文件中,也可以通過網(wǎng)絡(luò)傳輸。

現(xiàn)在,如果需要讀取這些對象,則將使用ObjectInputStream,它將把流轉(zhuǎn)換回相應(yīng)的對象。這稱為反序列化。

創(chuàng)建一個ObjectInputStream

為了創(chuàng)建對象輸入流,我們必須首先導(dǎo)入java.io.ObjectInputStream包。導(dǎo)入包后,就可以創(chuàng)建輸入流。

//創(chuàng)建與指定文件鏈接的文件輸入流
FileInputStream fileStream = new FileInputStream(String file);

//使用文件輸入流創(chuàng)建對象輸入流
ObjectInputStream objStream = new ObjectInputStream(fileStream);

在上面的示例中,我們創(chuàng)建了一個名為objStream的對象輸入流,該對象輸入流與名為fileStream的文件輸入流鏈接。

現(xiàn)在,objStream可以使用讀取文件中的對象。

ObjectInputStream的方法

ObjectInputStream類提供InputStream類中存在的不同方法的實現(xiàn)。

read()方法

  • read() - 從輸入流中讀取一個字節(jié)的數(shù)據(jù)

  • readBoolean() - 以布爾形式讀取數(shù)據(jù)

  • readChar() - 以字符形式讀取數(shù)據(jù)

  • readInt() - 以整數(shù)形式讀取數(shù)據(jù)

  • readObject() - 從輸入流中讀取對象

示例1:Java ObjectInputStream

讓我們看看如何使用ObjectInputStream類讀取由ObjectOutputStream類創(chuàng)建的對象。

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

class Main {
    public static void main(String[] args) {

        int data1 = 5;
        String data2 = "This is nhooo";

        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            ObjectOutputStream output = new ObjectOutputStream(file);

            //使用ObjectOutputStream寫入文件
            output.writeInt(data1);
            output.writeObject(data2);

            FileInputStream fileStream = new FileInputStream("file.txt");
            //創(chuàng)建對象輸入流
            ObjectInputStream objStream = new ObjectInputStream(fileStream);

            //使用readIng()方法
            System.out.println("整數(shù)數(shù)據(jù) :" + objStream.readInt());

            //使用readObject()方法
            System.out.println("字符串數(shù)據(jù): " + objStream.readObject());

            output.close();
            objStream.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

輸出結(jié)果

整數(shù)數(shù)據(jù): 5
字符串數(shù)據(jù): This is nhooo

在上面的示例中,我們使用了readInt()和readObject()方法從文件中讀取整數(shù)數(shù)據(jù)和對象數(shù)據(jù)。

在這里,我們使用了ObjectOutputStream將數(shù)據(jù)寫入文件。 然后,我們使用ObjectInputStream從文件中讀取數(shù)據(jù)。

示例2:Java ObjectInputStream

讓我們看另一個實際的實例,

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

class Dog implements Serializable {

    String name;
    String breed;

    public Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
}

class Main {
    public static void main(String[] args) {

        //創(chuàng)建一個Dog類的對象
        Dog dog = new Dog("Tyson", "Labrador");

        try {
            FileOutputStream file = new FileOutputStream("file.txt");

            //創(chuàng)建一個ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);

            //將對象寫入輸出流
            output.writeObject(dog);

            FileInputStream fileStream = new FileInputStream("file.txt");

            //創(chuàng)建一個ObjectInputStream
            ObjectInputStream input = new ObjectInputStream(fileStream);

            //讀取對象
            Dog newDog = (Dog) input.readObject();

            System.out.println("狗的名字: " + newDog.name);
            System.out.println("犬種: " + newDog.breed);

            output.close();
            input.close();
        }

        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

輸出結(jié)果

狗的名字: Tyson
犬種: Labrador

在上面的示例中,我們創(chuàng)建了

  •  ObjectOutputStream使用名為file的FileOutputStream命名輸出

  •  ObjectInputStream使用名為fileStream的FileInputStream命名輸入

  • Dog類的對象dog

在這里,我們?nèi)缓笫褂脤ο筝敵隽鲗ο髮懭胛募2⑶?,對象輸入流從文件中讀取對象。

注意:Dog類實現(xiàn)Serializable接口。這是因為ObjectOutputStream只將可序列化的對象寫入輸出流。

ObjectInputStream的其他方法

方法內(nèi)容描述
available()返回輸入流中的可用字節(jié)數(shù)
mark()標記輸入流中已讀取數(shù)據(jù)的位置
reset()將控件返回到輸入流中設(shè)置了標記的點
skipBytes()從輸入流中跳過并丟棄指定的字節(jié)
close()關(guān)閉對象輸入流
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清