jjzjj

Java MappedByteBuffer.isLoaded()

coder 2024-04-02 原文

在我看来MappedByteBuffer.isLoaded()在 Windows 上始终返回 false。当我在 BSD Unix 上测试时,我使用相同的测试数据得到 true

我应该担心吗? 无论我使用多大的数据,我基本上都无法让 isLoaded() 在 Windows 上返回 true。

这是我的测试代码供引用:

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() 在某个时候返回 true。如前所述,这似乎与 Windows 操作系统有关。这基本上意味着 isLoaded() 完全没有用。

也许我应该补充一点,即使 isLoaded() 总是返回 false,我的 MappedByteBuffer 在 Windows 上也能正常工作并且性能出色。所以当它说它没有加载时我真的不相信它。

在 Windows 7 上测试,使用 Oracle Java 7 update 9。

最佳答案

不,你不应该担心。

根据 http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html该行为依赖于“底层操作系统”的实现。

“返回值 false 并不一定意味着缓冲区的内容不驻留在物理内存中。”

关于Java MappedByteBuffer.isLoaded(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112448/

有关Java MappedByteBuffer.isLoaded()的更多相关文章

  1. Java MappedByteBuffer.isLoaded() - 2

    在我看来MappedByteBuffer.isLoaded()在Windows上始终返回false。当我在BSDUnix上测试时,我使用相同的测试数据得到true。我应该担心吗?无论我使用多大的数据,我基本上都无法让isLoaded()在Windows上返回true。这是我的测试代码供引用:importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.RandomAccessFile;importjava.nio.MappedByteBuffer;importjava.nio.channels.F

  2. ios - UIWebView isLoading 返回 YES,没有未完成的负载 - 2

    我有一个正在加载本地HTML文件的应用程序。HTML文件在iFrame中加载Googlemap。该应用程序有一个后退按钮,用于检查UIWebView.canGoBack和UIWebView.isLoading在webViewDidStartLoad和webViewDidFinishLoad中,我正在按照建议跟踪未完成的负载here,这样一旦我的未完成负载达到零,我就可以更新后退按钮的状态等。在第一次加载控件时,一旦所有的webViewDidFinishLoads发生,canGoBack和isLoading都会返回NO。在第二次加载控件时,一旦所有webViewDidFinishLoad

  3. android - Realm Android : what is mean by isValid(), isLoaded(), isManaged()? - 2

    在Realm中,有isValid()、isLoaded()、isManaged()三个方法。我想知道什么时候应该使用哪种方法? 最佳答案 有效publicfinalbooleanisValid()检查RealmObject是否仍然可以使用,即RealmObject没有被删除,Realm也没有被关闭。对于非托管对象,它将始终返回true。有两件事会使RealmObject无效:-关闭它所属的Realm实例并删除任何线程上的对象(如果您正在进行自动更新活套线)已加载publicfinalbooleanisLoaded()检查用于查找此R

随机推荐