使用nio可以将现有文件映射到内存中。但是有可能只在内存中创建它而没有硬盘上的文件吗?
我想模仿CreateFileMapping窗口函数,它允许你在内存中写入。
Java中是否有等效的系统?
目标是写入内存,以便其他程序(c)读取它。
答案 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中的大多数库都处理input和output streams而不是java.io.File个对象。
示例:image reading,XML,audio,zip
在可能的情况下,在处理I / O时,请使用流。
如果您需要随机访问数据,这可能不是您想要的。
使用内存映射文件时,使用MappedByteBuffer从FileChannel获得FileChannel.map(),如果您不需要文件,只需使用ByteBuffer,它完全存在于记忆中。使用ByteBuffer.allocate()或ByteBuffer.allocateDirect()创建其中一个。