Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 20 - Random-Access-I/O

## 20.2 Navigation in der Datei

- 20.2 Navigation in der Datei
  - 20.2.1 Positionierung des Dateizeigers
  - 20.2.2 Die Länge der Datei

### 20.2.1 Positionierung des Dateizeigers

Der Hauptunterschied zwischen dem sequentiellen und dem wahlfreien Zugriff auf eine Datei besteht darin, daß beim wahlfreien Zugriff mit einem expliziten Satzzeiger gearbeitet wird. Jeder Schreib- und Lesezugriff erfolgt an der Position, die durch den aktuellen Inhalt des Satzzeigers bestimmt wird, und positioniert den Zeiger um die Anzahl gelesener bzw. geschriebener Bytes weiter. Die Klasse `RandomAccessFile` stellt verschiedene Methoden zum Zugriff auf den Satzzeiger zur Verfügung:

    public long getFilePointer()

    public void seek(long pos)

    public void skipBytes(int n)

    public long length()
| java.io.RandomAccessFile

`getFilePointer` liefert die aktuelle Position des Satzzeigers; das erste Byte einer Datei steht dabei an Position 0. Da der Rückgabewert vom Typ `long` ist, unterstützt Java den Zugriff auf Dateien, die größer als 2 GByte sind, sofern es das Betriebssystem zuläßt.

Das Positionieren des Satzzeigers erfolgt mit der Methode `seek` an die durch `pos` angegebene Stelle. Anders als in C bezieht sich der Wert von `pos` dabei immer auf den Anfang der Datei. Das Positionieren relativ zur aktuellen Position kann mit der Methode `skipBytes` erledigt werden. Die neue Position wird dabei aus der aktuellen Position plus dem Inhalt des Parameters `n` berechnet. Auch negative Werte für `n` sind dabei erlaubt und bewirken eine Rückwärtsverschiebung des Satzzeigers.

|  | Es ist erlaubt, den Satzzeiger hinter das derzeitige Ende der Datei zu verschieben. Allerdings wird dadurch ihre tatsächliche Länge nicht verändert. Dies geschieht erst, wenn an der angesprungenen Position tatsächlich Zeichen geschrieben werden. |  |
Hinweis

### 20.2.2 Die Länge der Datei

Die Klasse `RandomAccessFile` besitzt zwei Methoden zum Zugriff auf die Länge der Datei:

    public long length()
      throws IOException

    public void setLength(long length)
      throws IOException
| java.io.RandomAccessFile

Mit `length` kann die derzeitige Länge der Datei bestimmt werden. Nach dem Öffnen einer bestehenden Datei liefert diese Methode deren initiale Länge. Schreibzugriffe am Ende der Datei erhöhen diesen Wert. Mit `setLength` kann die Länge der Datei verändert werden. Ist der als Argument übergebene Wert kleiner als die bisherige Länge, wird die Datei verkürzt. Ein eventuell dahinter stehender Dateizeiger wird auf das neue Ende der Datei gesetzt. Ist das Argument größer als die bisherige Länge, wird die Datei vergrößert. Der Wert der neu eingefügten Bytes bleibt allerdings undefiniert, bis sie explizit beschrieben werden.

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de