我有以下代码:
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
?
非常感谢提前!
答案 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)