通过Filechannel#map()
创建文件时,文件内容的默认字节值是多少?
每个字节是 0,还是未定义的行为?
代码片段如下:
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
FileChannel fileChannel = randomAccessFile.getChannel();
MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 1024 * 4);
mappedByteBuffer.putInt(1);
mappedByteBuffer.force();
运行此程序后,我检查了文件,发现除了第 4 个字节外,每个字节都是0。 是功能还是未定义的行为?
答案在文档中,即map()
的 javadoc :
内存映射文件的许多详细信息本质上依赖于基础操作系统,因此未指定。未指定当请求的区域未完全包含在此通道的文件中时此方法的行为。未指定此程序或其他程序对基础文件的内容或大小所做的更改是否传播到缓冲区。未指定对缓冲区的更改传播到文件的速率。