【发布时间】:2018-03-07 03:43:59
【问题描述】:
我正在尝试使用映射字节缓冲区 (Java),我必须在文件上使用 DirectBuffer 来执行一些算术运算:
MappedByteBuffer mbf = new RandomAccessFile("blah.bin", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE,0,100*8L);
问题: - 直接缓冲区是否被归零? 我有一个调试方法,将值转储为
private void dump(){
for (int i = 0; i < 100; i++) {
System.out.println(mbf.getDouble(i));
}
}
有趣的是,当我在写入任何值之前进行转储时,它会转储全零(双打):
当我写信到任何地方时说:
mbf.putDouble(13,100.0);
当我重新运行转储时,它会转储一些随机值:
0.0
0.0
0.0
0.0
0.0
3.16E-322
8.1387E-320
2.0835183E-317
5.333806864E-315
1.36545455721E-312
3.4955636664571E-310
1.8187371284868433E-307
100.0
5.164499756173817E120
0.0
0.0
0.0
0.0
0.0
我的逻辑依赖于零值
if (mbf.getDouble(6)==0.0)
//then do some thing
else
//do some thing else
在编写上述任何条件之前,如何确保将值正确初始化为零?有没有人有类似的问题?解决这种情况的最佳方法是什么?
高度赞赏任何见解。
更多细节: 操作系统:Windows 10 JDK:java版本“1.8.0_111”
提前致谢!
【问题讨论】:
-
文件在你打开之前是什么?
-
这是新的应用程序文件。
标签: java io mappedbytebuffer