Java ObjectInputStream完全ガイド:逆シリアル化の実践
Java ObjectInputStreamクラス
JavaでObjectInputStreamを使用してシリアル化済みオブジェクトを読み取る方法を、ステップバイステップの例と実践的なヒントで解説します。
java.ioパッケージのObjectInputStreamクラスは、ObjectOutputStreamで以前に書き込まれたオブジェクトを逆シリアル化します。抽象InputStreamクラスを拡張しています。
ObjectInputStreamに入る前に、シリアル化プロセスを扱うObjectOutputStreamクラスに精通していることを確認してください。
ObjectInputStreamの仕組み
シリアル化はJavaオブジェクトをバイトストリームに変換し、保存や送信を可能にします。逆プロセスである逆シリアル化はObjectInputStreamが担当し、バイトストリームを読み取って元のオブジェクトを再構築します。
ObjectInputStreamの作成
ObjectInputStreamを作成するには、まずクラスをインポートし、通常はFileInputStreamをソースとしてリンクします:
// ファイルにリンク
FileInputStream fileStream = new FileInputStream("example.dat");
// ObjectInputStreamでラップ
ObjectInputStream objStream = new ObjectInputStream(fileStream);
インスタンス化後、objStreamはファイルから任意のシリアル化済みオブジェクトを読み取れます。
ObjectInputStreamの主要メソッド
最も頻繁に使用されるメソッド:
read()– 1バイト読み取りreadBoolean()– boolean値を読み取りreadChar()– 文字を読み取りreadInt()– 整数を読み取りreadObject()– ストリームからオブジェクトを再構築
例1:基本的な逆シリアル化
整数と文字列をファイルに書き込み、読み戻す最小例:
import java.io.*;
public class Main {
public static void main(String[] args) {
int data1 = 5;
String data2 = "This is programiz";
try {
// データ書き込み
FileOutputStream fos = new FileOutputStream("file.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(data1);
oos.writeObject(data2);
// データ読み取り
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("整数データ: " + ois.readInt());
System.out.println("文字列データ: " + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力
整数データ: 5 文字列データ: This is programiz
例2:カスタムオブジェクトの逆シリアル化
シンプルなDogオブジェクトをシリアル化および逆シリアル化。クラスはSerializableを実装する必要があります。
import java.io.*;
class Dog implements Serializable {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Tyson", "Labrador");
try {
// シリアル化
FileOutputStream fos = new FileOutputStream("file.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog);
// 逆シリアル化
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog newDog = (Dog) ois.readObject();
System.out.println("犬の名前: " + newDog.name);
System.out.println("犬の品種: " + newDog.breed);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力
犬の名前: Tyson 犬の品種: Labrador
重要なポイント:
ObjectOutputStreamでオブジェクトを書き込むObjectInputStreamで読み戻すSerializableを実装したオブジェクトのみシリアル化可能
ObjectInputStreamのその他のメソッド
| メソッド | 説明 |
|---|---|
available() | ブロックせずに読み取れるバイト数を返す |
mark() | ストリームの現在位置をマーク |
reset() | ストリームを最新のマーク位置にリセット |
skipBytes(int n) | nバイトスキップ |
close() | ストリームを閉じ、リソースを解放 |
詳細については公式Javaドキュメントを参照。
Java
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除