【发布时间】:2011-05-14 18:43:03
【问题描述】:
Java 中的内存映射文件是否类似于 Windows 中的内存映射文件?还是仅仅基于Java中的内存和文件常用操作进行仿真?
【问题讨论】:
标签: java winapi memory-mapped-files
Java 中的内存映射文件是否类似于 Windows 中的内存映射文件?还是仅仅基于Java中的内存和文件常用操作进行仿真?
【问题讨论】:
标签: java winapi memory-mapped-files
它使用操作系统对内存映射文件的支持。
我正在尝试查找文档来支持它,但我还没有找到任何结论性的东西。然而,文档的各个部分确实这样说:
内存映射文件的许多细节本质上依赖于底层操作系统,因此未指定。当请求的区域未完全包含在此通道的文件中时,此方法的行为未指定。未指定此程序或其他程序对基础文件的内容或大小所做的更改是否传播到缓冲区。未指定缓冲区更改传播到文件的速率。
如果一切都只是模拟,就不需要这种未指定的行为。
【讨论】:
在您的问题和评论的字里行间,您要做的是使用内存映射文件在 Java 和 C++ 应用程序之间共享内存/对象。
我的建议是不要尝试这样做。
需要解决一些难题才能使其可靠:
Java 特有的问题是您不能将 Java 对象放在内存映射区域中。相反,您必须以某种与 C++ 端所期望的表示兼容的方式对它们进行序列化和反序列化。
最后,即使您确实成功解决了所有这些问题,您的解决方案也可能很脆弱,因为它取决于操作系统、C++ 和 Java 实现的未指定行为可能会改变,如果您更改上述任何版本的版本。
【讨论】: