Ein FileInputRecordStream-Objekt repräsentiert eine für den sequentiellen Lese-Zugriff geöffnete Datei. Die Datei wird beim Erzeugen des Objektes (siehe Abschnitt „Öffnen und Schließen einer Datei") implizit geöffnet.
Die FileInputRecordStream-Klasse bietet Methoden zum Lesen und Überspringen von Sätzen sowie zum Schließen der Datei. Die Methodengruppe zur Positionierung ist zwar vorhanden, stellt aber keine Funktionalität zur Verfügung.
Die Datei, die geöffnet werden soll, muss im zugrunde liegenden Dateisystem schon existieren. Für die Erzeugung einer Datei muss die Methode createNewFile() der Klasse RecordFile benutzt werden.
Für eine Datei, die für sequentiellen Lese-Zugriff geöffnet wurde, ist immer eine aktuelle Dateiposition definiert, an der die nächste Lese-Operation stattfindet. Die aktuelle Dateiposition wird durch die Nummer des Satzes, gemäß der Anordnung der Sätze in dieser Datei, definiert, wobei die Sätze einer Datei mit Null beginnend nummeriert werden. Nach dem Öffnen der Datei ist die aktuelle Dateiposition der Dateianfang.
Öffnen und Schließen einer Datei
Bei der Konstruktion eines FileInputRecordStream-Objektes wird die als RecordFile-Objekt angegebene Datei mit der angegebenen Zugriffsmethode oder den angegebenen Zugriffsparametern im Lese-Modus geöffnet. Die Datei muss im darunter liegenden Dateisystem bereits existieren und die Zugriffsmethode muss zu diesem Dateisystem gehören und muss für diese Datei erlaubt sein. Der Benutzer muss die zum Lesen erforderlichen Zugriffsrechte auf die Datei besitzen. Falls ein Security Manager aktiv ist und dessen Einschränkungen für diese Datei ein Lesen nicht erlauben, so wird eine Exception ausgelöst (siehe Abschnitt „Sicherheit").
Werden zum Öffnen Zugriffsparameter angegeben, so werden diese beim Öffnen berücksichtigt, soweit nicht die Datei-Parameter Vorrang haben. Nach dem Öffnen werden sie mit den entsprechenden Werten der geöffneten Datei aktualisiert.
Die Methode close() schließt die Datei. Danach sind keine E/A-Operationen über dieses FileInputRecordStream-Objekt mehr möglich.
Besonderheiten des DMS-Dateisystems
Die Shared-Update-Verarbeitung (siehe Abschnitt „Shared-Update-Verarbeitung" sowie Abschnitt „AccessParameter") eines FileInputRecordStream ist für die Zugriffsmethoden ISAM und UPAM möglich. Mit UPAM können allerdings nur PAM-Dateien mit der Shared-Update-Verarbeitung geöffnet werden. Da die Datei nur zum Lesen geöffnet wird, erfolgen alle Zugriffe ohne Sperre. Es können also keine Zugriffskonflikte auftreten. Es muss jedoch damit gerechnet werden, dass der Inhalt des Satzes zwischenzeitlich von einer anderen Anwendung geändert wurde.
Methoden zum Lesen von Sätzen
Die read-Methode wird in zwei Ausprägungen angeboten, in einer Variante, bei der der gelesene Satz in einem neu erzeugten Record-Objekt als Ergebnis bereitgestellt wird und einer Variante, bei der ein vom Aufrufer als Argument übergebenes Record-Objekt mit den Daten des gelesenen Satzes gefüllt wird.
Wird ein Satzpuffer neu angelegt, so hat er genau die Größe der gelesenen Daten. Stellt der Aufrufer das Record-Objekt bereit, muss er dafür sorgen, dass der Satzpuffer groß genug ist, um die Daten des zu lesenden Satzes aufzunehmen. Wenn der angegebene Satzpuffer zu klein ist, um die kompletten Daten aufzunehmen, wird eine Ausnahme ausgelöst und es werden keine Daten übertragen.
Die Methoden read() lesen den Satz an der aktuellen Dateiposition. Die aktuelle Dateiposition wird anschließend um eins erhöht, d.h. es wird automatisch auf den nächsten Satz positioniert.
Mit der Methode skip() ist es möglich, die angegebene Anzahl Sätze in der Datei zu überspringen. Dabei kann es vorkommen, dass nicht exakt die angegebene Anzahl an Sätzen übersprungen werden kann (z.B. wenn nicht mehr genügend Sätze in der Datei vorhanden sind). Der Rückgabewert von skip() gibt die tatsächliche Anzahl der übersprungenen Sätze an.
Die Methode available() liefert die Anzahl der Sätze, die ohne Blockieren mindestens gelesen werden können. Aber auch das Ergebnis Null, das häufig geliefert wird, wenn es nicht oder nur aufwendig feststellbar ist, ob ein Leseversuch zu einem Wartezustand (des Threads) führt, erlaubt nicht den Umkehrschluss, dass der nächste Aufruf von read() oder skip() tatsächlich zu solch einem Wartezustand führt.
Methoden zur Positionierung
Die Methode markSupported() gibt Auskunft darüber, ob das Markieren bzw. Repositionieren für diese Datei unterstützt wird. Analog zur Klasse java.io.FileInputStream wird für Objekte dieser Klasse derzeit grundsätzlich diese Positionierung nicht unterstützt, d.h. diese Methode liefert immer false.
Die Methode mark() ist zwar vorhanden, hat aber keine Funktion.
Ein Aufruf von reset() führt zu einer Ausnahme, da diese Funktionalität derzeit nicht unterstützt wird.