web-dev-qa-db-ja.com

ByteArrayInputStreamの内容を文字列に変換します

この投稿 を読みましたが、フォローしていません。 this を見ましたが、ByteArrayInputStreamを使用してStringByteArrayOutputStreamに変換する適切な例を見ていません。

ByteArrayInputStreamの内容をStringとして取得するには、ByteArrayOutputstreamを使用することをお勧めしますか、それともより望ましい方法がありますか?

この例 を検討し、ByteArrayInputStreamを拡張し、 Decorator を使用して実行時の機能を向上させました。これがByteArrayOutputStreamを使用するより良い解決策であることに関心がありますか?

21
Mushy

ByteArrayOutputStreamは、任意のInputStreamから読み取ることができ、最後に_byte[]_を生成します。

ただし、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.
_

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


コメントへの回答: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があります。

31
Joop Eggen

誰も言及していない理由org.Apache.commons.io.IOUtils

import Java.nio.charset.StandardCharsets;
import org.Apache.commons.io.IOUtils;

String result = IOUtils.toString(in, StandardCharsets.UTF_8);

ほんの1行のコード。

13
Cherry

Scannerを使用して、コンストラクターにByteArrayInputStreamを渡し、スキャナーからデータを読み取ります。次の例を確認してください。

ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
    data = scanner.next();
System.out.println(data);
1
Mifmif

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 を参照してください

1
Bowser Jr.