使用java.nio在内存中写入文件?

时间:2012-03-22 17:32:40

标签: java java-native-interface shared-memory memory-mapped-files

使用nio可以将现有文件映射到内存中。但是有可能只在内存中创建它而没有硬盘上的文件吗?

我想模仿CreateFileMapping窗口函数,它允许你在内存中写入。

Java中是否有等效的系统?

目标是写入内存,以便其他程序(c)读取它。

3 个答案:

答案 0 :(得分:3)

看看以下内容。创建了一个文件,但这可能与您要获得的文件一样接近。

MappedByteBuffer
MappedByteBuffer.load()
FileChannel
FileChannel.map()

这是一个尝试让您入门的片段。

    filePipe = new File(tempDirectory, namedPipe.getName() + ".pipe");
    try {
        int pipeSize = 4096;
        randomAccessFile = new RandomAccessFile(filePipe, "rw");
        fileChannel = randomAccessFile.getChannel();
        mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, pipeSize);
        mappedByteBuffer.load();
    } catch (Exception e) {
    ...

答案 1 :(得分:0)

根据定义,磁盘上存在一个文件。你的问题体现了矛盾。

答案 2 :(得分:0)

Java中的大多数库都处理inputoutput streams而不是java.io.File个对象。
示例:image readingXMLaudiozip

在可能的情况下,在处理I / O时,请使用流。

如果您需要随机访问数据,这可能不是您想要的。

使用内存映射文件时,使用MappedByteBufferFileChannel获得FileChannel.map(),如果您不需要文件,只需使用ByteBuffer,它完全存在于记忆中。使用ByteBuffer.allocate()ByteBuffer.allocateDirect()创建其中一个。