Convert Contents Of A ByteArrayInputStream To String

bytearrayinputstream, bytearrayoutputstream, java, string

Solution

A `ByteArrayOutputStream` can read from any `InputStream` and at the end yield a `byte[]`.

However with a `ByteArrayInputStream` it is simpler:

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.

For a `ByteArrayInputStream` `available()` yields the total number of bytes.

Addendum 2021-11-16

Since java 9 you can use the shorter readAllBytes.

byte[] bytes = in.readAllBytes();

Answer to comment: using 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();

Here in may be any InputStream.

Since java 10 there also is a `ByteArrayOutputStream#toString(Charset)`.

String s = baos.toString(StandardCharsets.UTF_8);

Problem

I read this post but I am not following. I have seen this but have not seen a proper example of converting a `ByteArrayInputStream` to `String` using a `ByteArrayOutputStream`. To retrieve the contents of a `ByteArrayInputStream` as a `String`, is using a `ByteArrayOutputstream` recommended or is there a more preferable way? I was considering this example and extend `ByteArrayInputStream` and utilize a Decorator to increase functionality at run time. Any interest in this being a better solution to employing a `ByteArrayOutputStream`?

Original source

Related problems