工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

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の主要メソッド

最も頻繁に使用されるメソッド:

例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

重要なポイント:

ObjectInputStreamのその他のメソッド

メソッド説明
available()ブロックせずに読み取れるバイト数を返す
mark()ストリームの現在位置をマーク
reset()ストリームを最新のマーク位置にリセット
skipBytes(int n)nバイトスキップ
close()ストリームを閉じ、リソースを解放

詳細については公式Javaドキュメントを参照。

Java

  1. Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
  2. Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
  3. Java継承のマスター:概念、種類、実践例
  4. Java Staticネストクラスの理解:用法、違い、実例
  5. Java無名インナークラス完全ガイド:定義、構文、実践例
  6. Javaシングルトンパターン完全解説:安全な実装と活用法
  7. Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
  8. Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
  9. Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
  10. Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
  11. Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除