Java MemoryFile在android中有什么用途

Java MemoryFile在android中有什么用途,java,android,memory,Java,Android,Memory,我想将一些字节写入共享内存。这是在我的应用程序1中完成的。从我的另一个应用程序application2中,我希望访问该共享内存以读取写入的字节。为此,我尝试使用android的MemoryFile类。我一直在思考如何在两个不同的应用程序之间引用相同的碎片内存。我现在也很困惑memoryFile是否用于相同的目的。 我找到的关于该主题的链接。 提前谢谢。 奎师那如果你想与记忆文件进行一些跨过程的使用,你可以使用以下方法: 您应该查看的是#getParcelFileDescriptor(Memory

我想将一些字节写入共享内存。这是在我的应用程序1中完成的。从我的另一个应用程序application2中,我希望访问该共享内存以读取写入的字节。为此,我尝试使用android的MemoryFile类。我一直在思考如何在两个不同的应用程序之间引用相同的碎片内存。我现在也很困惑memoryFile是否用于相同的目的。 我找到的关于该主题的链接。 提前谢谢。
奎师那

如果你想与
记忆文件
进行一些跨过程的使用,你可以使用以下方法:


您应该查看的是
#getParcelFileDescriptor(MemoryFile)
方法,您可以从
ContentProvider#openFile(Uri,String)
的实现中返回该方法。我怀疑内存文件没有getParcelFileDescriptor方法。当我评论这个与getParcelFileDescriptor相关的方法并使用getFileDescriptor时。它工作得很好

import java.io.FileDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import android.os.MemoryFile;

/**
 * Invoke hidden methods using reflection
 * 
 */
public class MemoryFileUtil {
    private static final Method sMethodGetFileDescriptor;
    static {
        sMethodGetFileDescriptor = get("getFileDescriptor");
    }

    public static FileDescriptor getFileDescriptor(MemoryFile file) {
        try {
            return (FileDescriptor) sMethodGetFileDescriptor.invoke(file);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }

    private static Method get(String name) {
        try {
            return MemoryFile.class.getDeclaredMethod(name);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}
并从内存文件创建文件描述符

FileDescriptor fd = MemoryFileUtil.getFileDescriptor(memFile);

MemoryFile可用于映射到物理内存。结果文件描述符(fd)可以传递给客户端(内存共享端)。客户端可以将相同的本机fd映射到相同的内存区域。然后可以使用本机fd共享内存,本机fd可以使用InputStream映射到java层

有关更多详细信息,请参阅此链接:

我认为“官方”的方法是使用内容提供商,或在外部存储上使用常规文件。+1对于内容提供商/ContentResolver,内容的大小很大(3-4 MB),我需要快速读写,因此我需要共享内存之类的东西。另外,如果您能帮助我理解memoryFile在Android中的使用,请告诉我。memoryFile的官方API非常糟糕(像往常一样)-但是隐藏起来的是
#getParcelFileDescriptor()
(可以很好地跨进程传输)和
#getFileDescriptor()
。我怀疑我的代码在MemoryFile.class.getDeclaredMethod(“getParcelFileDescriptor”)抛出异常;但它并不是真正的goto-catch子句,我只是在放了一个断点之后才知道,我真的不明白。如果你所做的只是通过FD,为什么要使用ashmem呢?只需使用ParcelFileDescriptor.createPipe()并在其中写入所需的任何本地数据即可。不需要灰烬。
FileDescriptor fd = MemoryFileUtil.getFileDescriptor(memFile);