English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 예제를 통해 Java ObjectOutputStream 및 그 메서드를 배울 것입니다.
java.io 패키지의 ObjectOutputStream 클래스는 ObjectInputStream으로 읽혀질 수 있는 객체를 작성할 수 있습니다.
OutputStream 추상 클래스를 상속받았습니다.
기본적으로, ObjectOutputStream는 클래스 이름과 객체 값을 사용하여 Java 객체를 인코딩합니다. 따라서 이 과정을 시리얼라이즈라고 합니다.
이렇게 변환된 스트림은 파일에 저장되고 네트워크 간을 전송할 수 있습니다.
주의ObjectOutputStream 클래스는 Serializable 인터페이스를 구현한 객체만을 작성합니다. 이는 객체가 스트림에 작성될 때 시리얼라이즈되어야 하기 때문입니다.
ObjectOutputStream를 생성하기 위해 먼저 java.io.ObjectOutputStream 패키지를 가져와야 합니다. 패키지를 가져온 후, 출력 스트림을 생성할 수 있습니다.
//FileOutputStream를 생성하고 그 안에 ObjectInputStream에 의해 읽힐 객체를 작성합니다 FileOutputStream fileStream = new FileOutputStream(String file); //ObjectOutputStream를 생성합니다 ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
위의 예제에서는 objStream라는 이름의 객체 출력 스트림을 생성했으며, 이 스트림은 fileStream라는 파일 출력 스트림과 연결되어 있습니다.
ObjectOutputStream 클래스는 OutputStream 클래스에서 등장하는 다양한 메서드를 구현합니다.
write() - 바이트 데이터를 출력 스트림에 기록하다
writeBoolean() - 부울 형식으로 데이터를 기록하다
writeChar() - 문자 형식으로 데이터를 기록하다
writeInt() - 정수 형식으로 데이터를 기록하다
writeObject() - 將對象寫入輸出流
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從文件中讀取數據。
再舉一個實例
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이 출력 스트림에 시리얼라이제이션할 수 있는 객체를 써야 한다는 것을 의미합니다.
메서드 | 콘텐츠 설명 |
---|---|
flush() | 출력 스트림에서 모든 데이터를 지웁니다 |
drain() | 모든 버퍼 데이터를 출력 스트림에 넣습니다 |
close() | 출력 스트림 닫기 |