【Java】シリアライズとデシリアライズについて(バイト列変換・復元)

Java

はじめに

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)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました