¿Hay alguna forma de expandir el búfer de bytes mapeado en memoria Java de modo que el nuevo tamaño se refleje de nuevo en el archivo asignado en el disco?Tampón de bytes asociado a memoria expandida de Java
11
A
Respuesta
10
No, tendrá que ajustar el tamaño del archivo subyacente y volver a crear el búfer de bytes asignados de memoria.
RandomAccessFile file = new RandomAccessFile(/* some file */);
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
// Some stuff happens...
// adjust the size
file.setLength(newLength);
// recreate the memory mapped buffer
buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
Nota: Establecer la longitud del archivo tiene un comportamiento algo extraño. Si escribe en el archivo a través del mapa en una posición específica que está más allá del final del archivo (ya sea usando map.position() o map.putX (position, ...)) los valores se agregarán al final de el archivo y no escrito en la posición que espera (al menos en Linux). Si se trata de un comportamiento no deseado, deberá anexar datos al archivo para que realmente crezca el archivo.
Cuestiones relacionadas
- 1. salida expandida de mysql
- 2. Memoria libre de una matriz de bytes en Java
- 3. Java - ¿Convertir int a Byte Array de 4 bytes?
- 4. 2 bytes a short java
- 5. Java: Convertir bytes a entero
- 6. JNI: pasando bytes de C++ a java
- 7. conversión de bytes a int en Java
- 8. ¿A dónde fue mi memoria? Conteo de bytes privados grandes
- 9. Modificar la ganancia de volumen en la memoria tampón de muestra de audio
- 10. Tampón de lavado: "\ n" frente a std :: endl
- 11. Objeto Serializable de Java a la matriz de bytes
- 12. ¿Por qué la primitiva de carga Java ocupa 2 bytes de memoria?
- 13. Emacs se desplacen más allá del extremo de tampón
- 14. Cómo asignar datos de memoria de 16 bytes
- 15. Modelo de memoria Java
- 16. BufferedImage to Bytes Java
- 17. administración de memoria java
- 18. Convertir cadena JRuby a matriz de bytes Java, y viceversa
- 19. matriz de bytes a matriz corta y viceversa en java
- 20. Convirtiendo cualquier objeto a una matriz de bytes en java
- 21. matriz de bytes a unsigned int en Java
- 22. La asignación a una matriz de bytes en Java
- 23. ¿Cómo convierto una matriz de bytes a Base64 en Java?
- 24. API de tipo RandomAccessFile para matriz de bytes en memoria?
- 25. Error fatal: tamaño de memoria permitido de 67108864 bytes agotado
- 26. Fatal error: Permitido el tamaño de la memoria de bytes 134217728 agotados (intentó asignar 87 bytes)
- 27. ¿Qué significa "memoria tiene 8 bytes alineados"?
- 28. Permitido el tamaño de la memoria de 268435456 bytes agotado
- 29. Tamaño de memoria permitida de 134217728 bytes agotado
- 30. TypeError: coaccionar a Unicode: String necesidad o tampón
¿Podría explicar el comportamiento extraño en otras palabras? ¿No se espera que se agregue al final del archivo si escribo más allá del final (a través del búfer asignado asumiendo que mapea el tamaño del archivo completo)? – geeko
Comience con un archivo de 50 bytes de tamaño. Llame a setLength (1000) para aumentar el tamaño del archivo. A continuación, cree un nuevo mapa a partir del archivo (file.getChannel(). Map (..., 0, 1000). Si en el nuevo MappedByteBuffer llama a putByte (500, (byte) 'x'), el valor 'x' aparecerá aparece como el byte número 50 en el archivo (índice basado en 0) no en la posición 500 (quizás no es extraño, pero es un comportamiento potencialmente inesperado). –
puedo ver lo que quiere decir. gracias michael. – geeko