ByteBuffer.asCharBuffer()
nimmt an, dass die Bytes UTF-16. (Ich kann nichts in den Dokumenten finden, das dies explizit sagt, aber die Implementierung behandelt nur Bytepaare als die Low- und High-Bytes von Zeichen.) Wenn Sie eine andere Codierung benötigen, müssen Sie einen anderen Ansatz verwenden.
Der einfachste Ansatz ist, einfach zu erstellen String
:
CharBuffer document = CharBuffer.wrap(byteOutputStream.toString(encoding));
Ich weiß, Sie sagten, Sie wurden als „eine neue Zeichenfolge zu schaffen versuchen zu vermeiden“, aber Ihr Code-Snippet wurde trotzdem ein separates Byte-Array Zuweisung (ByteArrayOutputStream.toByteArray()
"Erstellt ein neu zugewiesenes Byte-Array" gemäß den Dokumenten. Da CharBuffer
Random Access unterstützt und viele Codierungen (insbesondere UTF-8) variable Breite haben, ist es wahrscheinlich am besten, das ganze Ding sowieso in Zeichen umzuwandeln.
Wenn Sie wirklich wollen nur Streaming-Zugriff (im Gegensatz zu Random Access) auf die Zeichen dann vielleicht CharBuffer
ist nicht die beste Schnittstelle für den zugrunde liegenden Code zu akzeptieren.
Ich könnte die Codierung einstellen, aber wo ich es einstellen, um einen Zeichenpuffer zu bekommen. –
Ich bearbeitete die Antwort, um die Konvertierung anzuzeigen –