Java öffnen Stream von einem willkürlichen Ort in der Datei
-
26-10-2019 - |
Frage
Ich möchte einen Stream aus einer willkürlichen Position in einer vorhandenen Datei erhalten, beispielsweise muss ich von/zu einer Datei lesen/schreiben, die mit dem 101. Byte beginnt. Ist es sicher, so etwas zu verwenden?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Javadoc überspringen sagt, dass es manchmal eine geringere Anzahl von Bytes als angegeben überspringen kann. Was sollte ich dann tun?
Lösung
Wie wäre es mit Folgendem:
final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin
Andere Tipps
Sie können nicht mit einem DateiInputStream schreiben. Sie müssen eine RandomAccess -Datei verwenden, wenn Sie an willkürliche Stellen in einer Datei schreiben möchten. Eunfortunen gibt es keine einfache Möglichkeit, eine RandomAccessfile als Inputstream/Ausgangsstream zu verwenden (Sieht so aus, als hätte @AIX einen guten Vorschlag für die Anpassung von RandomAccessfile an InputStream/OutputStream), aber es gibt verschiedene Beispieladapter online.
Eine andere Alternative besteht darin, ein Filechannel zu verwenden. Sie können die Position des Filechannel direkt einstellen und dann die Utility -Methoden der Kanäle über den Kanal erhalten.