将ByteArrayInputStream的内容转换为String

时间:2014-06-05 11:41:17

标签: java string bytearrayoutputstream bytearrayinputstream

我读过this post,但我没有关注。我看过this,但没有看到使用ByteArrayInputStreamString转换为ByteArrayOutputStream的正确示例。

要将ByteArrayInputStream的内容检索为String,建议使用ByteArrayOutputstream还是更优选?

我正在考虑this example并扩展ByteArrayInputStream并使用Decorator来增加运行时的功能。任何对此的兴趣都是使用ByteArrayOutputStream

的更好解决方案

5 个答案:

答案 0 :(得分:29)

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。

答案 1 :(得分:12)

为什么没有人提到org.apache.commons.io.IOUtils

import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;

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

只需一行代码。

答案 2 :(得分:4)

Java 9+解决方案:

new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);

答案 3 :(得分: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);

答案 4 :(得分: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