Domanda

Ho un file che sto mappando in memoria tramite "FileChannel.map ()".Tuttavia sembra un po 'strano quando si legge una stringa fare quanto segue:

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

Ora so dal mio background C ++ che i file mappati in memoria vengono forniti all'utente come puntatori alla memoria.Quindi c'è un buon modo per saltare l'utilizzo di un array di byte e fare in modo che la conversione della stringa vada direttamente fuori dalla memoria mappata?

È stato utile?

Soluzione

Suggerisco:

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

È anche possibile utilizzare mapped.asCharBuffer () e ottenere i caratteri in questo modo.

Altri suggerimenti

In definitiva, no.Ma c'è un modo per avere una visione dei dati come caratteri.Guarda ByteBuffer.asCharBuffer ().

Internamente, il metodo asCharBuffer () fa la stessa cosa che stai proponendo, ma in base ai caratteri.

Non c'è modo di aggirare String che vuole una copia privata dei dati.Le stringhe sono immutabili e se usasse un array condiviso, potresti romperlo.È un peccato che non ci sia un costruttore String(CharSequence) o String(ByteBuffer).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top