1

入力ストリームからプレーンテキスト文字にバイトをエンコードしようとしています。したがって、次のように、スペースで区切られた int から文字列を作成しました。

InputStream in;
//etc
int b;
String finalString="";
while((b=in.read())!=-1)finalString+=""+b+" ";
in.close()

しかし問題は、これにより文字列が元のバイトの 3 ~ 4 倍大きくなることです。バイトをプレーンテキストにエンコードする他の方法はありますか?

4

6 に答える 6

3

私の理解が正しければ、あなたはバイナリ データをプレーン テキストに変換したいと考えています。そのためには Base64 を使用する必要があります。損失係数はわずか 4/3 になります。

Apache commons-codec には、Base64 エンコーダー (およびデコーダー) の無料の実装があります。

もう 1 つの可能性は Hex エンコーディング (commons-codec もサポート) ですが、バイナリ データの各バイトに対して 2 バイトのテキストが必要です。

于 2012-07-11T17:29:09.930 に答える
1

すべてのバイトを取得してバイト配列に出力し、バイト配列を使用して文字列を作成できます。

すなわち

String newString = new String(byteArray);
于 2012-07-11T17:28:37.527 に答える
1

現在のソリューションでは、10 進文字コードを文字列に連結するため、ファイル内の文字列よりも 3..4 倍長い文字列が生成されます。

Java は、次のように、ループを記述する必要なく、ストリームから文字列を読み取る方法を提供します。

InputStream in;
BufferedReader r = new BufferedReader(new InputStreamReader(in, "UTF8"));
String s = r.readLine();
于 2012-07-11T17:29:11.390 に答える
1

こちらのドキュメントに従ってください

たとえば、文字列が UTF8 の場合:

byte[] bytes = // you got that from somewhere...
String x = new String(bytes, "UTF8");
于 2012-07-11T17:29:19.563 に答える
1

Commons-codec には、バイトを Base64 エンコーディングにエンコードするメソッドがあります。

encodedText = new String(
                 org.apache.commons.codec.binary.Base64.encodeBase64(byteArray));
于 2012-07-11T17:29:24.667 に答える
1

すべてを単一の に入れることができればbyte[]、これはちょうど

new String(byteArray, StandardCharsets.UTF_16LE);

または、入力で使用すると予想される文字エンコーディング。

于 2012-07-11T17:26:36.250 に答える