JavaRush /Java Blog /Random-JA /インターフェース - マーカー
dupliaka
レベル 29
Санкт-Петербург

インターフェース - マーカー

Random-JA グループに公開済み
マーカー インターフェイスは、インターフェイスとクラスを関連付けることができる実行時の型チェックを備えた設計パターンです。なぜこれが必要なのかを理解するために、Serializible クラスをマーカーでマークする例を考えてみましょう。オブジェクトの状態をメモリに保存し、保存した内容を復号化する必要があると仮定しましょう。それから、オブジェクトをビットのセットに変換できるとあなたは言います。右。FileInputStream を使用してファイルに書き込む簡単な方法を使用できますが、これはオブジェクトが少ない場合にのみ便利ですが、オブジェクトが多数ある場合はどうなるでしょうか。これには素晴らしいシリアル化ツールがあります。これを使用するときの主なルールは、シリアル化されるオブジェクトにはすべてのデータが含まれており、他のオブジェクトを参照してはいけないということです。クラスを見てください。「ああ、フィールドは参照されていないので、Serializable マーカーを置くのは良いことです。」これを置くと、マークしたオブジェクトを ObjectOutputStream に書き込むことができることになります。ObjectOutputStream クラスには writeObject0() メソッドがあり、このメソッドにはオブジェクトを書き込めるかどうかをチェックする instanceof チェックが含まれており、一連のチェック全体が失敗した場合は NotSerializableException 例外がスローされ、失敗した場合はすべてがメモリに適切に書き込まれます。BigObject クラスを作成し、そのインスタンスをシリアル化しましょう。BigObject package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } } クラスはすでにシリアル化可能としてマークされています。1 つの ID フィールドとそれに付随する get/set メソッドがあります。 package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }

オブジェクトの記録

まず、シリアル化可能なクラス BigObject のオブジェクトを作成し、次にそのデータ バッファー (すべての弓 ByteArrayOutputStream を配置する場所) を準備します。次に、前述の ObjectOutputStream を準備し、それにバッファを渡し、オブジェクトをストリームに書き込んで閉じます。

オブジェクトの読み取り

書き込みバッファreadBufferを用意し、inputStreamを渡し、readObject()を読み込みましょう。これでオブジェクトが復元されました。「id」フィールドがリンクではなかったという事実のおかげで、データを完全に含む Serializable クラスをマークすることができました。クラス内に検証関数を追加する代わりに、トークンを使用することでクラス検証のプロセスを簡素化できます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION