Wie speichere ich eine 'RandomAccessFile' (Java)?

8

Ich verwende RandomAccessFile in Java:

%Vor%

Wie kann ich sicherstellen, dass diese Daten an das Betriebssystem gesendet werden? Es gibt keine file.flush () -Methode. (Beachten Sie, dass ich eigentlich nicht erwarte, dass es physikalisch geschrieben wird, ich bin damit zufrieden, dass es zum Betriebssystem geleert wird, so dass die Daten einen Tomcat-Crash überstehen, aber nicht unbedingt einen unerwarteten Serverleistungsverlust).

>

Ich benutze Tomcat6 unter Linux.

    
Tim Cooper 26.09.2011, 02:39
quelle

6 Antworten

12

Die einzigen Klassen, die eine .flush() -Methode bereitstellen, sind diejenigen, die tatsächlich ihre eigenen Puffer beibehalten. Da java.io.RandomAccessFile selbst keinen Puffer verwaltet, muss es nicht geleert werden.

    
Jonathan Callen 26.09.2011, 02:51
quelle
6

Schauen Sie sich den RandomAccessFile-Konstruktor javadoc genau an:

Die Modi "rws" und "rwd" funktionieren ähnlich wie die force (boolean) -Methode der FileChannel-Klasse und übergeben Argumente von "true" bzw. "false", außer dass sie immer für jede E / A-Operation gelten und daher häufig sind effizienter. Wenn sich die Datei auf einem lokalen Speichergerät befindet und ein Aufruf einer Methode dieser Klasse zurückgibt, wird garantiert, dass alle durch diesen Aufruf an der Datei vorgenommenen Änderungen auf dieses Gerät geschrieben wurden . Dies ist nützlich, um sicherzustellen, dass kritische Informationen bei einem Systemabsturz nicht verloren gehen. Wenn sich die Datei nicht auf einem lokalen Gerät befindet, wird keine solche Garantie gewährt.

    
Stas 23.10.2011 07:51
quelle
4

Sie können getFD().sync() Methode verwenden.

    
adatapost 26.09.2011 02:51
quelle
3

Hier ist, was ich in meiner App mache:

%Vor%

das ist 3-4 mal mehr Leistung verglichen mit getFd (). sync () und 5-7 mal im Vergleich zu "rws 'Modus

macht genau das, was die ursprüngliche Frage vorgeschlagen hat: Pässe auf nicht gespeicherte Daten zum Betriebssystem und von JVM. Nicht physisch auf die Festplatte schreiben, und bringt daher keine lästigen Verzögerungen

    
dm4 06.07.2012 11:58
quelle
1

Ich bin hier mit der gleichen Neugierde angekommen.

Und ich kann mir wirklich nicht vorstellen, was auf OS zu spülen und nicht unbedingt auf Disk zu bündeln braucht.

Meiner Meinung nach

Die beste Übereinstimmung mit dem Konzept einer verwalteten Flushing ist getFD().sync() , wie @AVD gesagt hat,

%Vor%

das sieht so aus, dass es in seiner Dokumentation sehr ähnlich aussieht wie FileChannel # force (boolean) funktioniert mit true .

Nun scheinen "rws" und "rwd" so zu funktionieren, als würden sie StandardOpenOption#SYNC und StandardOpenOption#DSYNC , bzw. FileChannel ist open .

%Vor%     
Jin Kwon 23.01.2016 02:04
quelle
-1

Ich habe gelernt, dass du nicht kannst ..

Einige verwandte Links hier: Ссылка und hier: Ссылка

    
Coffee 26.09.2011 02:48
quelle

Tags und Links