我读 这个帖子 但我没有跟随。我见过 但还没有看到转换 a 的正确示例 ByteArrayInputStreamString 用一个 ByteArrayOutputStream.

检索 a 的内容 ByteArrayInputStream 作为一个 String, ,正在使用 ByteArrayOutputstream 推荐还是有更好的方法?

我正在考虑 这个例子 并延伸 ByteArrayInputStream 并利用一个 装饰者 在运行时增加功能。任何对此有兴趣的更好的解决方案 ByteArrayOutputStream?

有帮助吗?

解决方案

可以从任何世代odiceTagcode读取一个生成的ByteArrayOutputStream,并且在末尾产生一个生成的InputStream

但是,使用byte[],它更简单:

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 for ByteArrayInputStream ByteArrayInputStream会产生字节总数。


回答评论:使用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);

只需一行代码。

使用Scanner并传递给它的构造函数,生成扫描仪然后从扫描仪读取数据,检查这个例子:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top