Frage

Ich bin für eine effiziente Möglichkeit, eine Datei, deren Größe unbekannt zu schaffen, sondern von MBs zu gb ist und füllen ihren Inhalt zufällig reichen kann. Ich kann einen ersten 200 Byte schreiben, als bis zum Ende springen und letzten 200 Bytes schreiben und in die Mitte bewegen und dort schreiben. Ist RandomAccessFile effizient, dies zu tun oder gibt es Alternativen besser geeignet für diese Art von Arbeit?

War es hilfreich?

Lösung

Ja, Verwendung RandomAccessFile - das ist, was es ist da. Sie könnte möglicherweise eine FileChannel verwenden, aber ich würde für RandomAccessFile zuerst gehen - es ist wahrscheinlich einfacher sein

.

Beachten Sie, dass Sie nicht in der Lage sein werden, „in der Mitte einfügen“ der Datei nach dem Endteil Schreiben: Ich weiß nicht, jedes Dateisystem, die das unterstützt. Sie werden die vollständige Größe kennen müssen, bevor Sie den letzten Abschnitt schreiben, im Grunde. Eine Alternative wäre die Reihe nach schreiben, das letzten Bit bis zum Ende zu erinnern.

Wenn Sie uns mehr Informationen darüber, was Sie tun müssen, (und wenn Sie Informationen über die Größe haben) können wir in der Lage sein, Ihnen mehr zu helfen.

EDIT: Um die Datei mit einer bestimmten Größe zu erstellen, können Sie über das Ende seek() und dann Daten schreiben:

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}

Danach verlassen hat, wird file.dat 101 Bytes lang sein. (Beachten Sie, dass normalerweise würden Sie verwenden try / finally etc.)

EDIT: Wie in den Kommentaren erwähnt coobird, setLength() wird auch die Datei erweitern - aber es wird auch die Datei abgeschnitten, wenn Sie eine Länge kleiner als die aktuelle Größe geben. Gegeben Sie Ihre Kommentare über im Grunde torrent Daten zu schreiben, ich vermute, dass die Suche nach und dann schreiben, ist genau das Verhalten, das Sie wollen. Wenn Sie ein Stück erhalten, suchen Sie nur an die richtige Stelle, schreiben Sie es aus, und die Datei wird sich verlängern, wenn er ihn braucht.

Andere Tipps

Random sollte es tun

Ich denke, Random für dieses Problem ist in Ordnung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top