この投稿 を読みましたが、フォローしていません。 this を見ましたが、ByteArrayInputStream
を使用してString
をByteArrayOutputStream
に変換する適切な例を見ていません。
ByteArrayInputStream
の内容をString
として取得するには、ByteArrayOutputstream
を使用することをお勧めしますか、それともより望ましい方法がありますか?
この例 を検討し、ByteArrayInputStream
を拡張し、 Decorator を使用して実行時の機能を向上させました。これがByteArrayOutputStream
を使用するより良い解決策であることに関心がありますか?
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.
_
ByteArrayInputStream
available()
の場合、合計バイト数が得られます。
コメントへの回答: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があります。
誰も言及していない理由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行のコード。
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);
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 を参照してください