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 ObjectInputStream 클래스

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

java.io 패키지의 ObjectInputStream 클래스는 ObjectOutputStream이 이전에 쓴 객체를 읽을 수 있습니다.

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

ObjectInputStream 클래스를 공부하기 전에, 그것을 이해해야 합니다ObjectOutputStream 클래스.

ObjectInputStream의 작동 원리

ObjectInputStream은 주로 ObjectOutputStream로 쓰인 데이터를 읽기 위해 사용됩니다.

기본적으로, ObjectOutputStream는 Java 객체를 해당 스트림으로 변환합니다. 이를 시리얼라이제이션이라고 합니다. 이 변환된 스트림은 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다.

이제 이러한 객체를 읽어야 한다면 ObjectInputStream를 사용하며, 이는 스트림을 해당 객체로 변환합니다. 이를 역 시리얼라이제이션이라고 합니다.

ObjectInputStream을 생성합니다

객체 입력 스트림을 생성하기 위해 먼저 java.io.ObjectInputStream 패키지를 가져오아야 합니다. 패키지를 가져온 후에는 입력 스트림을 생성할 수 있습니다.

//지정된 파일과 연결된 파일 입력 스트림을 생성합니다
FileInputStream fileStream = new FileInputStream(String file);
//파일 입력 스트림으로 객체 입력 스트림 생성
ObjectInputStream objStream = new ObjectInputStream(fileStream);

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

지금, objStream는 파일에서의 객체를 읽을 수 있습니다.

ObjectInputStream 메서드

ObjectInputStream 클래스는 InputStream 클래스에 존재하는 다양한 메서드의 구현을 제공합니다.

read() 메서드

  • read() - 입력 스트림에서 한 바이트의 데이터 읽기

  • readBoolean() - 부울 형식으로 데이터 읽기

  • readChar() - 문자 형식으로 데이터 읽기

  • readInt() - 정수 형식으로 데이터 읽기

  • readObject() - 입력 스트림에서 객체 읽기

예제1:Java ObjectInputStream

ObjectInputStream 클래스를 사용하여 ObjectOutputStream 클래스로 생성된 객체를 읽는 방법을 보겠습니다.

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 output = new ObjectOutputStream(file);
            //ObjectOutputStream로 파일에 쓰기 사용
            output.writeInt(data1);
            output.writeObject(data2);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //객체 입력 스트림 생성
            ObjectInputStream objStream = new ObjectInputStream(fileStream);
            //readInt() 메서드 사용
            System.out.println("정수 데이터 : "); + objStream.readInt());
            //readObject() 메서드 사용
            System.out.println("문자 데이터: "); + objStream.readObject());
            output.close();
            objStream.close();
        }
        catch(Exception e) {
            e.getStackTrace();
        }
    }
}

출력 결과

정수 데이터: 5
문자 데이터: This is w3codebox

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

여기서는 데이터를 파일에 쓰기 위해 ObjectOutputStream를 사용했습니다. 그런 다음, 파일에서 데이터를 읽기 위해 ObjectInputStream를 사용했습니다.

예제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) {
        //Dog 클래스의 객체를 생성합니다
        Dog dog = new Dog("Tyson", "Labrador");
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            //ObjectOutputStream을 생성합니다
            ObjectOutputStream output = new ObjectOutputStream(file);
            //객체를 출력 스트림에 쓰기
            output.writeObject(dog);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //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();
        }
    }
}

출력 결과

개의 이름: Tyson
개종: Labrador

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

  •  ObjectOutputStream은 이름이 file인 FileOutputStream을 사용하여 출력을 지정합니다

  •  ObjectInputStream은 이름이 fileStream인 FileInputStream을 사용하여 입력을 지정합니다

  • Dog 클래스의 객체 dog

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

주의:Dog 클래스는 Serializable 인터페이스를 구현합니다. 이는 ObjectOutputStream이 단순히 시리얼라이제이션 가능한 객체만 출력 스트림에 씁니다.

ObjectInputStream의 다른 메서드

메서드콘텐츠 설명
available()입력 스트림에서 사용 가능한 바이트 수를 반환합니다
mark()입력 스트림에서 읽은 데이터 위치를 태그합니다
reset()컨트롤을 입력 스트림에 설정된 태그 포인트로 돌아갑니다
skipBytes()지정된 바이트를 건너뛰고 버립니다
close()객체 입력 스트림을 닫습니다