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 SeekableInputStreams 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 SeekableInputStreams stellt sich für Integratoren einfach dar. Für bestimmte Typen von Datenströmen stellt jadice verschiedene Arten von SeekableInputStreams 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 SeekableInputStreams 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.

[jadice document platform Version 5.4.2.13: Dokumentation für Entwickler. Veröffentlicht: 2020-04-08]
loading table of contents...