Der beste Weg, die in einer Klasse ein Bild / Ton zu speichern?
-
03-07-2019 - |
Frage
Ich entwickle eine Art Austauschformat zwischen Instanzen einer Anwendung, so dass Benutzerinformationen sparen könnten, um es später Datei und wiederherstellen. Das gesamte ‚Austauschformat‘ ist eine einzige Klasse, die und auf der Platte geschrieben serialisiert wird.
Wie würden Sie vorschlagen, grafische / Tonin innerhalb dieser Klasse zu speichern? Ich möchte nur vermeiden, dass die Dateien in einem .jar setzen.
Lösung
Sie können Ihre Ressourcen in der Klasse als byte [] Arrays gespeichert halten. Mit ByteArrayInputStream und ByteArrayOutputStream Sie sind in der Lage, die Arrays als Ströme zu wickeln und nutzen sie, Ressourcen zu speichern und abzurufen.
Andere Tipps
Der Datenspeicher genau sowieso Sie innerhalb der Klasse mögen, aber benutzerdefinierte Serialisierung für die Daten implementieren. Siehe Serializable .
** me **
Wie wäre es mehr Details zu Ihrem Fall? die „beste“ Methode hängt in der Regel von der jeweiligen Anwendung / Verwendung. wird das Bild / Ton von Dateien kommen? aus einem Strom? Wird jede Instanz der Klasse erwartet getrennte Bilder zu speichern? Oder kann ein Bild zwischen den verschiedenen Instanzen gemeinsam genutzt werden?
gsmd
Bilder kommen aus Dateien, Töne kommen aus einem Strom; es gibt tatsächlich ein Set von Gegenständen, von denen einige eine kann Bild angehängt; ein Bild kann nicht sein, geteilt
Welche Methoden haben Sie versucht? Ich denke, die Serializable-Schnittstelle ist der Weg zu gehen. Hier zwei Artikel zum Thema.
Grundsätzlich
- implementieren, um die Serializable Schnittstelle in der Klasse
- kennzeichnen Mitglieder, die nicht in der Datei als transient (Mitglieder, die Kontextdaten wie Datei-Handles enthalten, Socket-Verbindungen, usw.). gespeichert werden sollen
-
müssen Sie anpassen, wie Ihr Bild und Ton Klassen Daten schreiben verwenden, aber die Umsetzung:
private void write (Object out) throws IOException;
private void readObject- (Object in) throws IOException, ClassNotFoundException;