3

最初にバッファから中間またはにコンテンツを読み取らずにStringfromを構築する方法はありますか?ByteBufferbyte[]char[]

byte[] を取る文字列コンストラクターに似た APIが理想的だと思います。

public String(ByteBuffer buffer, int offset, int length, Charset charset)

…が、そんなものは存在しません。

How to convert from ByteBuffer to Integer and String? を見つけました。ですが、補助配列を使用しています。

これまでに見つけた次善の策は、バイト バッファを として射影し、CharBufferを呼び出すことtoString()です。しかし、それはのようなもので文字列を圧縮することはできませんUTF-8.

4

4 に答える 4

3

返されたCharsetDecoder.decodeを呼び出すとどうなりますか。toStringCharBuffer

于 2013-02-25T23:58:42.297 に答える
1

java.lang.String は不変かつ最終的なものであるため、最終的には、既に受け入れられている形式でデータを提供する以外に選択肢はありません。(もちろん、リフレクションで内部を操作することはできません....)

文字列ビルダーなどを使用する API の背後にある醜さを隠すことはできますが、ある時点でメモリ内に配列の 2 つのコピーが存在することになります。1 つはビルダー内にあり、もう 1 つは実際の文字列用です。

于 2013-02-26T00:01:38.877 に答える
1

そのようなことはない。

ByteBuffer には文字が含まれていません。それらから文字列を作成する前に、それらを文字に変換する必要があります。

また、文字列は JVM メモリ内にある必要があります。ByteBuffer は、マップされている場合とダイレクトである場合があります。どちらの場合も、JVM の外部にあります。

データを JVM に移動して文字に変換するには、補助配列を使用する必要があります。

于 2013-02-25T23:58:26.237 に答える
0

Stringchars ではなくbytes でできています。UTF-8、UTF-16、ISO-8859-1、ISO-8859-5など、バイトを文字に変換するために使用する文字セットが必要です...

文字セットがわからない場合、バイトが表す文字はわかりません。

于 2013-02-26T00:01:56.323 に答える