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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top