Frage

Gibt es eine Möglichkeit, die Java Memory-Mapped-Byte-Puffer so zu erweitern, dass die neue Größe zurück auf die abgebildete Datei auf der Festplatte reflektiert wird?

War es hilfreich?

Lösung

Nein, müssen Sie die Größe der zugrunde liegenden Datei einzustellen und die Memory Mapped Byte Buffer neu.

RandomAccessFile file = new RandomAccessFile(/* some file */);
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());

// Some stuff happens...

// adjust the size
file.setLength(newLength);

// recreate the memory mapped buffer
buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());

Hinweis: Einstellen der Dateilänge hat einige etwas seltsame Verhalten. Wenn Sie die Datei über die Karte an einer bestimmten Stelle schreiben, die über das Ende der Datei ist (entweder mit map.position () oder map.putX (Position, ...)) werden die Werte an das Ende angehängt werden die Datei und nicht in der Position geschrieben Sie (auf linux zumindest) erwarten. Wenn dieses unerwünschte Verhalten müssen Sie Daten in die Datei, um anzufügen, um wirklich die Datei zu wachsen.

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