Objekte binär speichern

jf

Bekanntes Mitglied
Hallo, ich möchte verschiedene Objekte mit großen Datenmengen binär speichern, da XML-Serialisierung zuviel Speicherplatz benötigt. Leider habe ich dies noch nicht gemacht, weshalb ich mich nun vertrauensvoll an die Leser dieses Forums wende. :)

=> Wie sollte ich hierfür am Besten vorgehen?
 

KrokoDiehl

Top Contributor
Suchst du so etwas?
Java:
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream	  objOut  = new ObjectOutputStream(byteOut);
objOut.writeObject(obj);
objOut.close();

byte[] data = byteOut.toByteArray();

Das schreibt ein Java-Objekt dass Serializable implementiert in ein byte-Array. Es gibt sicher noch andere Varianten, aber diese habe ich g'rad gefunden :)
 

jf

Bekanntes Mitglied
Vielen Dank KrokoDiehl!
Wie schreibe ich das ByteArray in eine Datei? Mit FileWriter geht das scheinbar nicht...?
 

jf

Bekanntes Mitglied
FileOutputStream z.B.
Ok, es läuft jetzt - doch leider ist die Ausgabe sogar noch größer, als die XML-Serialisierung... :(

Kennt jemand eine Möglichkeit, wie man dies platzsparender hinbekommt?

Hintergrund:
Momentan werden die verschiedenen Datensätze in 32-Byte-Blöcke geschrieben.
Das Format ist natürlich für jede Art von Datensatz unterschiedlich, weshalb beim Schreiben, als auch beim Lesen eine separate Behandlung für jeden Datensatz-Typ erforderterlich ist. Dabei kennzeichnet das erste Byte jedes Blocks, um welche Art von Daten es sich handelt. Das Format ist sehr alt, z. B. werden aus historischen Gründen für das Datum (noch zweistellig!) sogar noch BCD-Werte verwendet.
Ich dachte mir nun, man könnte dies sehr viel effektiver gestalten, indem man ein Framework aus einer abstrakten Holder-Klasse und einer RecordSet-Klasse für jeden Datensatz-Typ (welche die abstrakte Klasse erweitert) erstellt. Die verschiedenen RecordSets können dabei sehr einfach serialisiert werden (mit ein paar wenigen Zeilen Quelltext können alle verschiedenen Datensatz-Typen geschrieben und auch gelesen werden).
Dies funktioniert auch wunderbar, doch wird leider sehr viel mehr Speicherplatz benötigt als zuvor mit dem binärem Blockformat. Da die Daten dann via Mobilfunk übermittelt werden sollen, ist dies ein großes Handycap. Über eure Ideen und Verbesserungsvorschläge wäre ich daher sehr dankbar!!! :applaus:
 

KrokoDiehl

Top Contributor
Muss ggfs. nicht alles in den Objekten serialisiert werden? Mit
Code:
transient
kann man Eigenschaften angeben, die beim Serialisieren dann nicht mit gemacht werden. Vielleicht kannst du so auch auch Referenzen unter den Objekten untereinander lösen, die man dann ggfs nachträglich wieder einpflegen muss.
Ich bin in dem Thema aber auch nicht wirklich daheim... was ich meine ist:
Java:
class A
{ ... }

class B
{
   protected A myA;
}
Hier würde beim Serialisieren eines Objekts der Klasse B das komplette Objekt myA mit serialisiert. Wenn myA aber zuvor schon serialisiert würde, könnte man sich das ggfs sparen.
 

jf

Bekanntes Mitglied
Danke für eure Anregungen.

Leider werden alle Klassenargumente benötigt, es gibt auch keine Verschachtelung von Objekten.

Das mit dem Zippen hatte ich auch als Notnagel im Kopf, lieber wäre mir allerdings ein Format, mit welcher man ein Objekt äußerst platzsparend in einer Datei speichern kann...
 
T

tuxedo

Gast
Wie Platzsparend muss es denn sein? Kommts da auf bytes oder kilobytes oder megabytes an?

Wenn nicht auf bytes ankommt: ObjectOutputStream ...

Ansonsten: Externalize benutzen ... google hilft.

- Alex
 

LoR

Bekanntes Mitglied
... großen Datenmengen binär speichern ...

An deiner Stelle würde ich mir in einem solchen Fall eine eigenes binäres Format ausdenken. Dadurch hast du den gesamten Prozess unter Kontrolle und wirst bei halbwegs geschickten Vorgehen am meisten Platz sparen. Darüber hinaus kannst du auch abschätzen wieviel Speicherplatz du benötigen wird. Das Stichwort für das Thema lautet: NIO (z.B. JDK 1.4.2 New I/O-related APIs & Developer Guides -- from Sun Microsystems).
 
T

tuxedo

Gast
An deiner Stelle würde ich mir in einem solchen Fall eine eigenes binäres Format ausdenken. Dadurch hast du den gesamten Prozess unter Kontrolle und wirst bei halbwegs geschickten Vorgehen am meisten Platz sparen. Darüber hinaus kannst du auch abschätzen wieviel Speicherplatz du benötigen wird. Das Stichwort für das Thema lautet: NIO (z.B. JDK 1.4.2 New I/O-related APIs & Developer Guides -- from Sun Microsystems).

Kommen wir nochmal aufs Thema zurück:

jf hat gesagt.:
...ich möchte verschiedene Objekte mit großen Datenmengen binär speichern...

Also ich glaub' nicht, dass jf hier Objekte hat die so groß sind (das müssten ja fast schon gigabyte sein), dass sie das Speichern mit NIO erfordern um noch eine angemessene Performance zu bekommen.

IO dürfte nach wie vor super ausreichend sein. Wenn das doch zu langsam ist, kann man immer noch auf NIO umbauen. Gab da doch ne Regel: Erst anfangen zu optimieren wenn man ein tatsächliches Problem hat. Alles andere führt zu nix :)

Und zum Schluss: ObjectOutputStream wenns nicht auf bytes oder kilobytes ankommt, Externalize wenn's wirklich drauf ankommt einzelne bytes zu sparen.

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12
G Unveränderbare Objekte Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben