Markierungsschnittstellen sind ein Entwurfsmuster mit Laufzeit-Typprüfung, mit dem Sie eine Schnittstelle und eine Klasse verknüpfen können. Um zu verstehen, warum dies notwendig sein könnte, betrachten Sie ein Beispiel für die Markierung der Serializible-Klasse mit einer Markierung. Nehmen wir an, wir müssten den Zustand eines Objekts im Speicher speichern und dann auch in der Lage sein, das Gespeicherte zu entschlüsseln. Dann, sagen Sie, können wir unser Objekt in eine Menge von Bits umwandeln. Rechts. Mit FileInputStream können wir auf einfache Weise in eine Datei schreiben. Dies ist jedoch nur praktisch, wenn nur wenige Objekte vorhanden sind. Was aber, wenn es viele davon gibt? Dafür gibt es ein wunderbares Serialisierungstool. Die Hauptregel bei der Verwendung lautet, dass das zu serialisierende Objekt alle Daten enthalten muss und nicht auf andere Objekte verweisen darf. Schauen Sie sich Ihre Klasse an: „Aha, die Felder werden nicht referenziert und es ist gut, die Markierung Serialisierbar zu setzen.“ Und wenn Sie es angeben, bedeutet dies, dass die von Ihnen markierten Objekte in ObjectOutputStream geschrieben werden können. Die ObjectOutputStream-Klasse verfügt über eine writeObject0()-Methode und enthält Prüfinstanzen, die prüfen, ob das Objekt geschrieben werden kann. Wenn die gesamte Prüfreihe fehlschlägt, wird eine NotSerializableException-Ausnahme ausgelöst, und wenn nicht, wird alles sauber in den Speicher geschrieben. Erstellen wir eine BigObject-Klasse, deren Instanzen wir serialisieren.
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; } }
Die BigObject-Klasse ist bereits als Serialisierbar markiert. Es verfügt über ein ID-Feld und zugehörige Get/Set-Methoden. 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"); } }
GO TO FULL VERSION