Pregunta

Tengo un archivo que estoy mapeando en la memoria a través de 'FileChannel.map ()'.Sin embargo, parece un poco extraño al leer una cadena hacer lo siguiente:

1) read a int for the string length
2) allocate a byte[length] object
3) use .get to read length bytes
4) convert the byte[] to a string

Ahora sé por mi experiencia en C ++ que los archivos asignados en memoria se le dan al usuario como punteros a la memoria.Entonces, ¿hay una buena manera de omitir el uso de una matriz de bytes y hacer que la conversión de cadenas salga directamente de la memoria mapeada?

¿Fue útil?

Solución

Sugiero:

MappedByteBuffer mapped = fileChannel.map(mode, position, size);
String s = new String(mapped.array());

También es posible usar mapped.asCharBuffer () y obtener los caracteres de esta manera.

Otros consejos

En última instancia, no.Pero hay una forma de ver los datos como personajes.Mire ByteBuffer.asCharBuffer ().

Internamente, el método asCharBuffer () hace lo mismo que estás proponiendo, pero de forma individualizada.

No hay forma de evitar que String quiera una copia privada de los datos.Las cadenas son inmutables y si usara una matriz compartida, podría romper eso.Es lamentable que no exista un constructor String(CharSequence) o String(ByteBuffer).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top