31

この投稿を読みましたが、フォローしていません。私はこれByteArrayInputStreamを見たことがありますが、 aをStringaに変換する適切な例を見たことがありませんByteArrayOutputStream

ByteArrayInputStreamの内容をとして取得するStringには、推奨される を使用していByteArrayOutputstreamますか、それともより好ましい方法がありますか?

私はこの例を検討しており、 Decoratorを拡張ByteArrayInputStreamして利用し、実行時の機能を増やしました。これが採用するより良い解決策であることに興味がありますか?ByteArrayOutputStream

4

5 に答える 5

47

AByteArrayOutputStreamは any から読み取ることができInputStream、最後に a を生成しbyte[]ます。

ただし、 a を使用すると、ByteArrayInputStreamより簡単になります。

int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.

の場合ByteArrayInputStream available()、合計バイト数が得られます。


補遺 2021-11-16

Java 9 以降、より短いreadAllBytesを使用できます。

byte[] bytes = in.readAllBytes();

コメントへの回答: ByteArrayOutputStream の使用

ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
    int nread = in.read(buf, 0, buf.length);
    if (nread <= 0) {
        break;
    }
    baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();

ここでは、任意の InputStream を指定できます。


Java 10以降、ByteArrayOutputStream#toString(Charset).

String s = baos.toString(StandardCharsets.UTF_8);
于 2014-06-05T11:52:43.510 に答える
1

Base64 エンコーディングを使用する

ByteArrayOutputStream を取得したと仮定します。

ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));

http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.htmlを参照してください。

于 2014-06-05T12:19:36.660 に答える