読者です 読者をやめる 読者になる 読者になる

リズムのじかん

javascript、typescriptなど中心に書きます。

オブジェクトをシリアライズする

業務でやったことのメモ。javaです。

やりたいこと

  • オブジェクトをシリアライズしてクライアントへ送信する。
  • クライアントへ送信するのでアウトプットはString型。
import java.io.*;
import org.apache.commons.codec.binary.Base64;

public class Utils {
  /**
   * オブジェクトをシリアライズします。
   * 
   * @param target
   * @return
   * @throws IOException
   */
  public static String serialize(Object target) throws IOException {
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    ObjectOutputStream outputStream = new ObjectOutputStream(byteStream);
    outputStream.writeObject(target); // オブジェクトをシリアライズ
    outputStream.close();
    byteStream.close();
    byte[] byteArray = byteStream.toByteArray();
    // byte[] byteArray = encript(byteStream.toByteArray()); <= 暗号化が必要な場合
    return Base64.encodeBase64String(byteArray);
  }

  /**
   * デシリアライズします。
   * 
   * @param target
   * @return
   * @throws IOException
   * @throws ClassNotFoundException
   */
  public static Object deserialize(String target) throws IOException,
      ClassNotFoundException {
    byte[] byteArray = Base64.decodeBase64(target);
    // byte[] byteArray = decript(Base64.decodeBase64(target)); <= 復号化が必要な場合
    ByteArrayInputStream byteStream = new ByteArrayInputStream(byteArray);
    ObjectInputStream inputStream = new ObjectInputStream(byteStream);
    return inputStream.readObject();
  }
}

暗号化が必要な場合はcipherなど使って別途実装してください。