2016-04-11 5 views
0

ByteBuffer.get()操作でByteBufferからbyte []をコピーする必要がない方法がありますか?ByteBufferからStringに直接移動しますが、中間バイト[]はありません。

私はこのポストJava: Converting String to and from ByteBuffer and associated problems

を見ていた、それは私もしたくない仲介CharBufferの原因となります。

ByteBufferからStringに行きたいと思います。

私は[]根本的なバイトを持って知っている場合は、これは私がByteBufferのと似た何かを期待していたので、

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

のようなコードで簡単です。私はこれが可能ではないかもしれないと考え始めていますか?私はByteBufferのNバイトを実際にデコードする必要があります。

これは早すぎる最適化のビットかもしれませんが、私は本当に興味があり、性能をテストしたいと思っています。 (個人的なプロジェクトは本当に)。

直接ByteBufferのために本当に感謝、 ディーン

+2

[ByteBuffer.array()](https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#array%28%29)を意味しますか? – user3159253

答えて

2

ないが、ありません。 Stringはコンストラクタ引数としてByteBufferを取らず、1つ(またはchar[])をラップすることはできないため、中間のものを用意する必要があります。バッファが非直接的な場合は、array()メソッドを使用して、バッキング配列(中間配列ではない)への参照を取得し、そのうちのStringを作成します。

プラスの面では、おそらくプロジェクトにパフォーマンスの高い場所がたくさんあります。

+0

よく、私はnioライブラリを使って遊んでいて、テストでは高価なバイトコピーが表示されていました。(私はより大きなバイト配列のコピーを防ぐことを望んでいました。 –

+0

しかし、完全なアプリケーションスタックの文脈では、それは最小限になるでしょう –

+0

基本的に管理されていない(Javaに関する限り)コピーを持たずにJavaの 'String'を作成しようとするといくつかの問題が起きることが考えられますの間のバイトの。 – Kayaman

関連する問題