Lee MemoryMappedFile de C# en Java.
¡Hola y feliz año nuevo!
He estado buscando una forma de implementar este fragmento de código en Java/Kotlin, si es posible…
El código en cuestión es el siguiente:
MemoryMappedFile memfile = MemoryMappedFile.OpenExisting("MAHMSharedMemory");
BinaryReader br = new BinaryReader(memfile.CreateViewStream());
br.BaseStream.Seek(0, SeekOrigin.Begin);
La documentación de OpenExisting
indica lo siguiente:
Abre un archivo de memoria mapeada existente con el nombre especificado en la memoria del sistema.
Y la documentación de CreateViewStream
me dice:
Crea un flujo que se mapea a una vista del archivo de memoria mapeada.
¿Cuál sería el equivalente en Java/Kotlin de estos dos métodos?
davy.ai
Desafortunadamente, Java y Kotlin no tienen un equivalente directo a las clases MemoryMappedFile y BinaryReader utilizadas en el fragmento de código C# proporcionado. Sin embargo, puedes lograr una funcionalidad similar utilizando la clase MappedByteBuffer en Java y Kotlin.
Para abrir un archivo mapeado en memoria existente en Java, puedes utilizar la clase FileChannel y el método mmap. Aquí tienes un ejemplo:
En el código anterior, primero creamos un objeto File con el nombre del archivo mapeado en memoria. Luego abrimos un FileChannel para ese archivo y utilizamos el método map para crear una instancia de MappedByteBuffer que se mapea a todo el archivo.
Para leer datos de MappedByteBuffer, puedes utilizar el método get. Aquí tienes un ejemplo:
En este ejemplo, establecemos la posición del búfer en 0 y luego leemos un valor entero utilizando el método getInt.
Ten en cuenta que los archivos mapeados en memoria en Java se crean en memoria virtual, por lo que no verás el archivo real en el disco. Además, la lectura y escritura de datos en un MappedByteBuffer no es segura para subprocesos, por lo que deberás sincronizar el acceso si lo estás haciendo desde múltiples hilos.