0

我有以下代码:

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 个字节,则 YZ 将被预填充,\u0000从而无法检查equals. 我在这里做错了什么?在这种情况下,我应该如何将字节转换为 a String

提前谢谢了!

4

3 回答 3

4

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

存储入变量的数量(InputStream.read返回一个有用的数字)并将其指定给适当的OutputStream.write重载以仅写入数组的一部分(包含有用数据的部分)。

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

于 2013-10-20T03:57:57.387 回答
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-argtoString()方法使用平台默认编码。

于 2013-10-20T04:11:40.557 回答
2

新字符串(baos.toByteArray(),0,strLen,编码)

于 2013-10-20T03:56:18.780 回答