ByteArrayOutputStream.toString()生成额外的字符

时间:2013-10-20 03:47:50

标签: java

我有以下代码:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int size = 4096;
byte[] bytes = new byte[size];

while (is.read(bytes, 0, size) != -1)
{
    baos.write(bytes);
    baos.flush();
}

当我这样做时:

String s = baos.toString();

我将\u0000 - s附加到我的字符串中。因此,如果我的字符数据仅为Y字节以外的X字节,则Y-Z将预先填充\u0000,因此无法检查equals。我在这做错了什么?在这种情况下,我应该如何将字节转换为String

非常感谢提前!

3 个答案:

答案 0 :(得分:4)

整个数组(全部4096个字节)写入输出 - 数组不知道它们包含多少“有用数据”!

读取多少存储到变量中(InputStream.read返回一个有用的数字)并指定相应的OutputStream.write重载以仅写入一部分(包含数组的有用数据。

虽然上述更改应“解决”问题,但通常建议使用带有显式字符集的string<->byte[]转换表单。

答案 1 :(得分:3)

你应该只在每次循环中写出你正在阅读的数据:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int size;
byte[] bytes = new byte[4096];

while (size = is.read(bytes, 0, bytes.length) != -1)
{
    baos.write(bytes, 0, size);
}
baos.flush();
String s = baos.toString();

您可以考虑指定用于将字节转换为String的特定字符集。 no-arg toString()方法使用平台默认编码。

答案 2 :(得分:2)