異邦人になってみた~~上海生活写真ブログ

中国上海市在住です。もう10年を超えました。休日は星空(天の川)撮影やポートレート撮影等、連休時はカメラを持って中国各地を旅行してます。最近は内モンゴル自治区によく行っています。

 このブログについて(about)
  中国旅行/観光/写真記事一覧(省別)

JAVAでオブジェクト(Class)をバイト配列に変換する方法


最近物覚えが悪くて。。。備忘録です。
オブジェクト(Class)をバイト配列に変換する方法
自分でソースを書くのが面倒なので、シリアライズするのが一番楽なんですが、
ObjectOutputStream(ObjectInputStream)って単独でNewできないんですよね。
Inputストリームのインスタンスを作成するのって結構めんどくさい。
ファイルを使えばできますが。。。
シリアライズするときに、例えばDBに入れたいときなど、
ファイルを使いたくない場合、ByteArrayOutputStream(ByteArrayInputStream)を使えばいいようです

SendMessageと言うものを適当に作って試してみます。

//オブジェクトをBYTE配列に変換(class SendMessage)
public static byte getByteObject(SendMessage sendMsg)
{
  byte
retObject = null;
  try {
      ByteArrayOutputStream byteos = new ByteArrayOutputStream();
      ObjectOutputStream objos = new ObjectOutputStream(byteos);
      objos.writeObject(sendMsg);
      objos.close();
      byteos.close();
      retObject = byteos.toByteArray();
    } catch (IOException ex) {
      // TODO 自動生成された catch ブロック
      ex.printStackTrace();
    }

  return retObject;
}

//BYTE配列をオブジェクトに変換
public static SendMessage createSendMessageObject(byte[] objByte)
{
  SendMessage sendMsg = null;
  try {
      ByteArrayInputStream byteis = new ByteArrayInputStream(objByte);
      ObjectInputStream objis = new ObjectInputStream(byteis);
      sendMsg = (SendMessage) objis.readObject();
      byteis.close();
      objis.close();
  } catch (IOException | ClassNotFoundException e) {
      // TODO 自動生成された catch ブロック
      e.printStackTrace();
  }
  return sendMsg;

}