English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 가이드

Java 흐름 제어

Java 배열

Java面向对象(I)

Java面向对象(II)

Java面向对象(III)

Java 예외 처리

Java 리스트(List)

Java Queue(큐)

Java Map集合

Java Set集合

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java ObjectOutputStream 클래스

이 튜토리얼에서는 예제를 통해 Java ObjectOutputStream 및 그 메서드를 배울 것입니다.

java.io 패키지의 ObjectOutputStream 클래스는 ObjectInputStream으로 읽혀질 수 있는 객체를 작성할 수 있습니다.

OutputStream 추상 클래스를 상속받았습니다.

ObjectOutputStream의 작동 원리

기본적으로, ObjectOutputStream는 클래스 이름과 객체 값을 사용하여 Java 객체를 인코딩합니다. 따라서 이 과정을 시리얼라이즈라고 합니다.

이렇게 변환된 스트림은 파일에 저장되고 네트워크 간을 전송할 수 있습니다.

주의ObjectOutputStream 클래스는 Serializable 인터페이스를 구현한 객체만을 작성합니다. 이는 객체가 스트림에 작성될 때 시리얼라이즈되어야 하기 때문입니다.

創建一個ObjectOutputStream

ObjectOutputStream를 생성하기 위해 먼저 java.io.ObjectOutputStream 패키지를 가져와야 합니다. 패키지를 가져온 후, 출력 스트림을 생성할 수 있습니다.

//FileOutputStream를 생성하고 그 안에 ObjectInputStream에 의해 읽힐 객체를 작성합니다
FileOutputStream fileStream = new FileOutputStream(String file);
//ObjectOutputStream를 생성합니다
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);

위의 예제에서는 objStream라는 이름의 객체 출력 스트림을 생성했으며, 이 스트림은 fileStream라는 파일 출력 스트림과 연결되어 있습니다.

ObjectOutputStream의 메서드

ObjectOutputStream 클래스는 OutputStream 클래스에서 등장하는 다양한 메서드를 구현합니다.

write() 메서드

  • write() - 바이트 데이터를 출력 스트림에 기록하다

  • writeBoolean() - 부울 형식으로 데이터를 기록하다

  • writeChar() - 문자 형식으로 데이터를 기록하다

  • writeInt() - 정수 형식으로 데이터를 기록하다

  • writeObject() - 將對象寫入輸出流

示例1:Java ObjectOutputStream

ObjectOutputStream을 사용하여 객체를 파일에 저장하고, ObjectInputStream을 사용하여 파일에서 이러한 객체를 읽는 방법을 보여드리겠습니다.

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 w3codebox;
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            //創建一個ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);
            //將對象寫入輸出流
            output.writeInt(data1;
            output.writeObject(data2;
            //ObjectInputStream을 사용하여 데이터를 읽기 위해
            FileInputStream fileStream = new FileInputStream("file.txt");
            ObjectInputStream objStream = new ObjectInputStream(fileStream);
            System.out.println("Integer data : "); + objStream.readInt());
            System.out.println("String data: "); + objStream.readObject());
            output.close();
            objStream.close();
        }
        catch(Exception e) {
            e.getStackTrace();
        }
    }
}

출력 결과

Integer data: 5
String data: This is w3codebox

위의 예제에서는 파일에서 정수 데이터와 객체 데이터를 읽기 위해 readInt() 메서드와 readObject() 메서드를 사용했습니다.

在這裡,我們使用ObjectOutputStream將數據寫入文件。然後使用ObjectInputStream從文件中讀取數據。

示例2:Java ObjectOutputStream

再舉一個實例

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) {
        //創建一個Dog類的對象
        Dog dog1 = new Dog("泰里", "拉布拉多獵犬");
        try {
            FileOutputStream fileOut = new FileOutputStream("file.txt");
            //創建一個ObjectOutputStream
            ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
            //將對象寫入輸出流
            objOut.writeObject(dog1;
            //對象讀取
            FileInputStream fileIn = new FileInputStream("file.txt");
            ObjectInputStream objIn = new ObjectInputStream(fileIn);
            // 對象讀取
            Dog newDog = (Dog) objIn.readObject();
            System.out.println("狗名: " ); + newDog.name);
            System.out.println("犬種: " ); + newDog.breed);
            objOut.close();
            objIn.close();
        }
        catch(Exception e) {
            e.getStackTrace();
        }
    }
}

출력 결과

개 이름: 테리
개종: 라브라도 리터

위의 예제에서 우리는 다음을 생성했습니다

  •  objOut이라는 ObjectOutputStream은 fileOut이라는 FileOutputStream을 사용합니다.

  •  objIn이라는 ObjectInputStream은 fileIn이라는 FileInputStream을 사용합니다.

  • Dog 클래스의 객체 dog1.

여기서 우리는 객체 출력 스트림을 사용하여 객체를 파일에 쓰고, 객체 입력 스트림을 사용하여 파일에서 객체를 읽습니다.

주의:Dog 클래스는 Serializable 인터페이스를 구현합니다. 이는 ObjectOutputStream이 출력 스트림에 시리얼라이제이션할 수 있는 객체를 써야 한다는 것을 의미합니다.

ObjectOutputStream의 다른 메서드

메서드콘텐츠 설명
flush()출력 스트림에서 모든 데이터를 지웁니다
drain()모든 버퍼 데이터를 출력 스트림에 넣습니다
close()출력 스트림 닫기