2016-04-11 6 views
0

Gibt es einen Ansatz, der es vermeidet, byteBuffer mit der ByteBuffer.get() - Operation Byte [] zu kopieren.Von ByteBuffer zu String direkt gehen, aber ohne Zwischenbyte []?

Ich war auf der Suche auf diesen Beitrag Java: Converting String to and from ByteBuffer and associated problems

und das verursacht einen Vermittler CharBuffer, die ich nicht so gut werden soll.

Ich möchte es von ByteBuffer zu String gehen.

Wenn ich weiß, ich habe ein byte [] zugrunde liegt, ist dies mit dem Code einfach wie

so
new String(data, offset, length, charSet); 

Ich wurde mit ByteBuffer etwas ähnliches zu hoffen. Ich fange an zu denken, dass das nicht möglich ist? Ich muss N Byte meines ByteBuffers wirklich entschlüsseln.

Dies mag ein bisschen vorzeitige Optimierung sein, aber ich bin wirklich nur neugierig und wollte die Leistung testen und quetschen jedes bisschen aus. (persönliches Projekt wirklich).

Dank, Dean

+2

Meinst du [ByteBuffer.array()] (https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#array%28%29)? – user3159253

Antwort

2

wirklich nicht für ein direktes ByteBuffer, Nr. Sie müssen Zwischenprodukt haben, weil String kein ByteBuffer als ein Konstruktorargument nimmt, und Sie können einen (oder sogar einen char[]) nicht umbrechen. Wenn der Puffer nicht direkt ist, können Sie die array()-Methode verwenden, um einen Verweis auf das Sicherungsarray (das kein intermediäres Array ist) abzurufen und daraus ein String zu erstellen.

Auf der positiven Seite, gibt es wahrscheinlich viel leistungsfähigere Stellen in Ihrem Projekt.

+0

Nun, ich spiele mit einer Niobibliothek und das Testen zeigt, dass das Kopieren von Bytes teuer ist :(Ich hatte gehofft, weitere Large-Byte-Array-Kopien zu verhindern und direkt zu gehen. Es scheint wirklich, als hätten sie diese Funktion ... shucks. –

+0

aber ja, im Kontext eines vollen Anwendungsstacks wäre es minimal –

+0

Ich kann mir vorstellen, dass es einige Probleme geben kann, die versuchen, einen Java 'String' aus im Grunde nicht verwalteten (soweit Java betroffen ist) Speicher ohne Kopieren zu erstellen von Bytes zwischen. – Kayaman

Verwandte Themen