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在他的回答中为我们两人做了这件事:谢谢你的解释!