【问题标题】:Memory Mapped file between Java and C# Unity3dJava 和 C# Unity3d 之间的内存映射文件
【发布时间】:2020-09-24 10:00:38
【问题描述】:

我正在使用平台窗口和 Java(用于写入文件)和 C# Unity3D 用于读取内存映射文件。

我将它用于 Java

   File f = new File("c:\\tmp\\mapped.txt");
        f.delete();

        FileChannel fc = new RandomAccessFile(f, "rw").getChannel();

        long bufferSize=8*1000;
        MappedByteBuffer mem =fc.map(FileChannel.MapMode.READ_WRITE, 0, bufferSize);

        int start = 0;
        long counter=1;

        long startT = System.currentTimeMillis();
        long noOfMessage = 1000;
        for(;;)
        {
            if(!mem.hasRemaining())
            {
                start+=mem.position();
                mem =fc.map(FileChannel.MapMode.READ_WRITE, start, bufferSize);
            }
            mem.putLong(counter);
            counter++;
            if(counter > noOfMessage )
                break;
            Thread.sleep(400);
        }

对于 C# Unity3D,我正在读取内存中的文件

 // Update is called once per frame
   

     void Update()
        {
            using (MemoryMappedFile mappedFile = MemoryMappedFile.OpenExisting("C:\\tmp\\mapped.txt"))
            {
                using (var accessor = mappedFile.CreateViewAccessor())
                {
                    accessor.Read(1, out int omegay);
                    Debug.Log("counter " + omegay.ToString());
                }
    
            }
        }

当前的问题。

  1. Java 文件写入文件,文件内有空值,而不是应有的整数。
  2. 在 C# Unity3D 中出现无法打开文件异常

【问题讨论】:

    标签: java c# unity3d


    【解决方案1】:

    尝试将访问模式指定为只读:

    MemoryMappedFile.OpenExisting("C:\\tmp\\mapped.txt", MemoryMappedFileRights.Read))
    

    同样的应用到视图访问器。

    我没有尝试过,但是如果 Java 没有采用完全排他锁,那么以只读方式打开文件应该可以工作。试一试;)

    ~皮诺

    【讨论】:

    • 我仍然得到 IOException: 无法打开文件,文件在那里,我关闭了 java 应用程序,仍然无法从 C# 访问它
    • 这意味着 2 件事:(1) Java 采用完全排他锁,因此您对此无能为力,以及 (2) Java 程序在退出时没有清理,因此离开了文件上的永久锁定,只有在机器重新启动时才会被清除。
    • 发现java对memorymap文件有排他锁,有解决办法吗?
    • 我不知道,抱歉
    • OpenExisting 使用地图名而不是路径名......也许错误就在这里。因此,在您的情况下,我将使用名称管道或套接字。如果可能的话,我不明白你为什么在 java 和 c# 之间使用内存共享..dunno
    猜你喜欢
    • 2020-11-06
    • 2011-05-14
    • 2011-02-04
    • 2014-11-16
    • 2016-12-08
    • 2014-04-04
    • 1970-01-01
    • 2010-11-04
    • 2015-09-07
    相关资源
    最近更新 更多