はじめに
Java でネットワーク通信にてオブジェクトを送信したい場合に、インスタンス(オブジェクト)をバイト列に変換する必要がある場合があります。その際に使用する機能がシリアライズ(Serialization) と デシリアライズ(Deserialization)です。
今回は、シリアライズ(Serialization) と デシリアライズ(Deserialization)の使い方についてログとして記載していきたいと思います。
他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:
👉スッキリわかるJava入門
👉スッキリわかるJava入門 実践編
シリアライズとは
シリアライズとは、オブジェクトをバイト列に変換して保存や転送可能にする仕組みのことです。主に以下のような用途に使用します。
- ネットワーク経由で送信するたのデータ作成
- ファイルを保存するためのデータ作成
例
Javaでは Serializable インターフェースを実装するだけでシリアライズ可能になります。特別なメソッドを実装する必要はありません。
package com.dao;
import java.io.*;
public class User implements Serializable {
private int id;
private String name;
public User(int id, String name) {
this.name = name;
this.id = id;
}
}
package com.example;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import com.dao.User;
/**
* App
*
*/
public class App {
public static void main(String[] args) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.dat"))) {
User p = new User(1, "mori");
oos.writeObject(p);
} catch (IOException e) {
e.printStackTrace();
}
}
}
デシリアライズとは
デシリアライズとは、シリアライズされたバイト列をオブジェクトに復元する処理です。
例
Javaでは Serializable インターフェースを実装するだけでデシリアライズ可能になります。特別なメソッドを実装する必要はありません。
package com.example;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import com.dao.User;
/**
* App
*
*/
public class App {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat"))) {
User p = (User) ois.readObject();
System.out.println("復元されたオブジェクト: " + p);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
除外したいフィールド
シリアライズ実行時に、特定のフィールドだけ除外したい場合に transient修飾子を使用することでシリアライズ対象から除外することができます。
例
private transient String password; // シリアライズされない
最後に
Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)
以上、ログになります。
これからも継続していきましょう!!


コメント