意外と使うことが多いのでメモ程度にライブラリを作った。
public final class ByteArray {
static byte[] fromObject(Object o) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(o);
byte[] bytes = bos.toByteArray();
out.close();
bos.close();
return bytes;
}
static Object toObject(byte[] bytes) throws OptionalDataException, StreamCorruptedException, ClassNotFoundException, IOException{
return new ObjectInputStream(new ByteArrayInputStream(bytes)).readObject();
}
}
現在Androidの開発をやっているのですが、AIDLで通信するときにプリミティブ型(byte,int,String,and so on)のデータしか送れない。
本来ならParcelableを使わないといけないらしいのですが、そんなもの守る気はありません←
というわけで上のメソッドを使えば簡単にSerializableを実装しているObjectとByteを相互変換できます。