2013-02-27 138 views
5

ऐसा लगता है कि MappedByteBuffer.isLoaded() लगातार false विंडोज पर लौटाता है। जब मैं बीएसडी यूनिक्स कहता हूं तो मुझे एक ही टेस्ट डेटा का उपयोग करके true मिलता है।जावा मैपडबेटबफर .isLoaded()

मुझे चिंता करनी चाहिए? मैं मूल रूप से विंडोज़ पर सच होने के लिए isLoaded() नहीं प्राप्त कर सकता हूं इससे कोई फर्क नहीं पड़ता कि मैं किस आकार का डेटा उपयोग करता हूं।

यहाँ संदर्भ के लिए अपने परीक्षण कोड है:

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"); 
     } 
    } 
} 

मैं समझता हूँ कि load() के रूप में मैं यहाँ का उपयोग मैं isLoaded() कुछ बिंदु पर सही वापस जाने के लिए उम्मीद करेंगे केवल एक संकेत है, लेकिन इस तरह के छोटे आकार के साथ है। जैसा कि कहा गया है कि यह विंडोज ओएस से संबंधित प्रतीत होता है। इसका मूल रूप से मतलब है कि isLoaded() बिल्कुल कोई उपयोग नहीं है।

शायद मुझे यह जोड़ना चाहिए कि विंडोज़ पर मेरा MappedByteBuffer बिल्कुल ठीक काम करता है और तारकीय प्रदर्शन के साथ भी isLoaded() हमेशा झूठा रिटर्न देता है। इसलिए जब मैं कहता हूं कि यह लोड नहीं होता है तो मुझे वास्तव में विश्वास नहीं होता है।

विंडोज 7 पर परीक्षण किया गया, का उपयोग कर ओरेकल जावा 7 अद्यतन 9.

उत्तर

2

नहीं यदि आप चिंतित नहीं होना चाहिए।

http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html के अनुसार व्यवहार "अंतर्निहित ऑपरेटिंग सिस्टम" के कार्यान्वयन पर निर्भर करता है।

"झूठी वापसी का मूल्य यह इंगित नहीं करता है कि बफर की सामग्री भौतिक स्मृति में निवासी नहीं है।"