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

Java ByteArrayOutputStream.toString()生成额外字符,java,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追加到

我有以下代码:

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,从而无法检查是否等于。我做错了什么?在这种情况下,如何将字节转换为字符串

非常感谢

整个数组所有4096字节都将写入输出-数组不知道它们包含多少有用的数据

Store whole was read to a variable返回一个有用的数字,并将其指定给适当的重载,以便只写入包含数组有用数据的部分


虽然上述更改可以解决此问题,但通常建议使用包含显式字符集的stringbyte[]转换形式。

每次通过循环写入的数据量应与读取的数据量相同:

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();

您可以考虑指定一个特定的字符集来将字节转换为字符串。无参数toString方法使用平台默认编码。

0,strLen是不必要的。尽管听起来很愚蠢,你介意用代码来说明它吗?@carlspring Ted Hopp在他的回答中为我们两人做了这件事:谢谢你的解释!