Zur effizienten und speicherschonenden Verarbeitung großer Datenmengen versucht die jadice document platform, sofern es das Dokumentformat erlaubt, nur die für die aktuelle Seitendarstellung benötigten Daten zu lesen, zu verarbeiten und dynamisch zu puffern, statt alle Dokumentdaten komplett im Speicher zu halten.
Für dieses Vorgehen werden Datenströme benötigt, deren Dateizeiger beliebig
positioniert werden kann. In jadice stehen zu diesem Zweck die
SeekableInputStream
s zur Verfügung. Die Klasse SeekableInputStream
ist eine
abstrakte Basisklasse, welche die Klasse InputStream
um
folgende Methoden erweitert:
seek(long)
Setzen der Leseposition im Datenstrom
length()
Länge der Daten in Bytes. Falls die Länge nicht bekannt ist, wird der Wert
-1
zurückgegeben.getStreamPosition()
Aktuelle Leseposition innerhalb des Datenstroms
Die Verwendung von SeekableInputStream
s stellt sich für Integratoren einfach
dar. Für bestimmte Typen von Datenströmen stellt jadice verschiedene Arten von
SeekableInputStream
s zur Verfügung, die den eigentlichen Datenstrom umhüllen.
Abhängig vom Anwendungsfall und dem Typ des Eingangsdatenstroms sollte die passende
Art von SeekableInputStream
gewählt werden.
Die gebräuchlichsten SeekableInputStream
s werden in den folgenden Abschnitten
kurz erläutert.
RandomAccessFileInputStream
stellt einen SeekableInputStream
für lokal
(als Datei) verfügbare Bilddaten dar.
Die Klasse bietet einen Konstruktor mit einem
File
-Objekt, das auf die Bilddatei zeigt, zur
Instantiierung an. Diese Datei wird mit einem bestimmten
FileInputStream
geöffnet, der für die folgenden
Lesevorgänge gehalten wird. Während der Verarbeitung in jadice bleibt der
FileInputStream
zu der Bilddatei offen und ein
Lesezeiger wird innerhalb des Streams positioniert. Zu beachten ist hierbei,
dass die Quelldatei, während das Dokument im Viewer geöffnet ist, nicht
verändert werden darf. Dies führt, zum Beispiel unter Windows, gegebenenfalls
auch zur Sperrung des Zugriffes auf die betreffende Datei.
Zur Verarbeitung der Bilddaten in jadice wird eine temporäre Datei erzeugt, in der bereits gelesene Daten abgelegt werden. Nach Gebrauch, spätestens jedoch beim nächsten Start der jadice document platform, werden die nicht mehr benötigten temporären Dateien gelöscht. Falls durch den Integrator keine abweichende Konfiguration vorgenommen wird, werden die temporären Dateien im durch das System vorgegebenen Temporär-Verzeichnis abgelegt.
Zur Instantiierung bietet der FileCacheInputStream
einen Konstruktor, der
einen gegebenen InputStream
aufnimmt und eine
Bearbeitungsdatei im gesetzten Temporär-Verzeichnis anlegt.
Ein weiterer Konstruktor bietet die Möglichkeit neben dem
InputStream
ein Temporär-Verzeichnis und ein Flag, ob
die erzeugte Datei nach Gebrauch zu löschen ist, anzugeben.
Bilddaten werden bei diesem Stream-Typ im Hauptspeicher gehalten. Ähnlich dem
FileCacheInputStream
bietet diese Klasse einen Konstruktor, der einen
gegebenen InputStream
aufnimmt und für Lesevorgänge hält.
Ein zweiter Konstruktor erlaubt zusätzlich eine Angabe der Blockgröße, in der
Daten im Hauptspeicher gepuffert werden sollen. Diese Art der internen
Datenverwaltung wird in Security-Relevanten Kontexten bevorzugt.
Ein Vorteil dieser Datenhaltung ist ein extrem schneller Zugriff auf die Dokumentrohdaten. Nachteilig ist ein erhöhter Speicherbedarf durch die Datenhaltung im Hauptspeicher.