2013-02-27 11 views
5

Es scheint mir, dass MappedByteBuffer.isLoaded() unter Windows false konsequent zurückgibt. Wenn ich auf BSD Unix teste, bekomme ich true mit den gleichen Testdaten.Java MappedByteBuffer.isLoaded()

Sollte ich mir Sorgen machen? Ich kann isLoaded() im Grunde nicht auf True unter Windows zurückgeben, egal welche Datengröße ich verwende.

Hier ist mein Test-Code als Referenz:

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.RandomAccessFile; 
import java.nio.MappedByteBuffer; 
import java.nio.channels.FileChannel; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class MemMapTest { 

    private static final String FILENAME = "mydata.dat"; 
    private static final int MB_1 = 1048576; // one Mbyte 
    private static final byte[] testData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // len = 10 bytes 

    public static void main(String[] args) throws FileNotFoundException, IOException { 

     // Create a 10 Mb dummy file and fill it with dummy data 
     RandomAccessFile testFile = new RandomAccessFile(FILENAME, "rw"); 
     for (int i = 0; i < MB_1; i++) { 
      testFile.write(testData); 
     } 

     MappedByteBuffer mapbuf = testFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, MB_1 * 20).load(); 
     testFile.close(); 

     if (mapbuf.isLoaded()) { 
      System.out.println("File is loaded in memory"); 
     } else { 
      System.out.println("File is NOT loaded in memory"); 
     } 
    } 
} 

Ich verstehe, dass load() nur ein Hinweis ist, aber mit so kleinen Größen wie ich hier verwenden würde ich erwarten, isLoaded() irgendwann wahr zurückzukehren. Wie gesagt, scheint dies mit Windows OS zu tun zu haben. Es bedeutet im Grunde, dass isLoaded() ist absolut nutzlos.

Vielleicht sollte ich hinzufügen, dass meine MappedByteBuffer unter Windows funktioniert absolut gut und mit stellaren Leistung, auch wenn isLoaded() immer false zurückgibt. Ich glaube es nicht wirklich, wenn es sagt, dass es nicht geladen ist.

Getestet auf Windows 7, Oracle Java 7 Update 9.

Antwort