Mapa de memória diretamente para a cadeia
-
27-10-2019 - |
Pergunta
Eu tenho um arquivo que eu estou mapeamento na memória, através de 'FileChannel.mapa()'.No entanto, parece um pouco estranho quando a leitura de uma string para fazer o seguinte:
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
Agora eu sei da minha C++ fundo que arquivos de memória mapeada são dadas para o usuário como ponteiros para a memória.Então, há uma boa maneira de ignorar usando uma matriz de bytes e só tenho a seqüência de caracteres de conversão vá para a direita fora da memória mapeada?
Solução
Eu sugiro:
MappedByteBuffer mapped = fileChannel.map(mode, position, size);
String s = new String(mapped.array());
Também é possível usar o mapped.asCharBuffer () e obter os caracteres por este caminho.
Outras dicas
Em última análise, não. Mas há uma maneira de obter uma visualização dos dados como personagens. Olhada ByteBuffer.asCharBuffer ().
Internamente, o método asCharBuffer () faz a mesma coisa que você está propondo, mas em uma base de char-by-char.
Não há nenhuma obtenção em torno de Seqüência de caracteres querendo uma cópia privada dos dados.Strings são imutáveis e se é utilizada uma matriz compartilhada, você pode quebrar.É uma pena que não há String(CharSequence)
ou String(ByteBuffer)
construtor.