maquina - Archivo de memoria asignada en C++ leído en Java
aumentar memoria tomcat windows (2)
Tengo un programa de C ++ que usa en un punto
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
es algo así como "myfile"
sin extensiones o ruta, es decir, un archivo asignado en memoria. Puedo encontrar el archivo con WinObj -Browser ( WinObj ) en la ruta Sessions/1/BaseNamedObjects/myfile
. Si intento leer ese archivo en particular en Java, lo intenté
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Pero siempre obtengo el mismo error: no puedo encontrar el archivo especificado en el comando RandomAccessFile
. Tal vez se necesita otro acceso al archivo? ¿Cúal?
Como entiendo por otras publicaciones, siempre usan una ruta y una extensión, sin embargo, no tengo idea de que la ruta y la extensión serían en mi caso ...
Lo que estoy buscando es una forma de acceder a los espacios de nombres de objetos del Kernel. Espacios de nombres de los objetos del Kernel
Lo sé, hay un ejemplo de JNI ( Memorymap usando JNI ), sin embargo, me gustaría que sea sencillo y usar nio
(si es posible).
ACTUALIZAR
Así que lo intenté todo en C # y fue ridículamente fácil, no me llevó más de 5 líneas de código.
Un archivo es un archivo, estoy de acuerdo con "Joachim Pileborg" en que el programa Java no tiene el archivo en su directorio de trabajo. Tratar
String working dir = System.getProperty("user.dir");
y asegúrese de que el archivo esté en la ruta correcta.
OpenFileMapping
utilizar CreateFileMapping
lugar de OpenFileMapping
. De esa manera, creará un archivo real en el disco que está asociado con la asignación de archivos.
Nota: Es importante tener en cuenta que el uso de métodos regulares de lectura / escritura NO se sincronizará con una asignación de archivos de un proceso diferente. Así que todavía necesitas usar algo como MappedByteBuffer en Java