JAvaはオブジェクトをストリームに変換し,ストリームをオブジェクトに変換する(cloneメカニズム+シーケンス化メカニズムを含む)

1919 ワード

クラスは以下のように,ここではテストのために内部クラスのみを用いた.
class Book implements Serializable {
    int i = 1;
}

オブジェクトをバイトに変換
Book b = new Book();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = null;
objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(b);
byte[] bytes = byteArrayOutputStream.toByteArray();

バイトをオブジェクトに変換
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = null;
objectInputStream = new ObjectInputStream(byteArrayInputStream);
Book book = (Book) objectInputStream.readObject();

しかし、これは非静的な内部クラスであり、外部クラスの参照を暗黙的に含むため、エラーが発生しました.
だからクラスを
static class Book implements Serializable {
    int i = 1;
}

それでいい
さらに、java自体のcloneメカニズムに問題があるため、これは良いクローンメカニズムです.