当我调用toString()时,为什么String接收器的大小小于原始的ByteArrayOutputStream的大小

时间:2016-07-27 08:18:36

标签: java string bytearrayoutputstream

我面临着一个奇怪的问题。有些代码比长篇故事更好:

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
buffer.write(...); // I write byte[] data
// In debugger I can see that buffer's count = 449597
String szData = buffer.toString();
int iSizeData = buffer.size();
// But here, szData's count = 240368
// & iSizeData = 449597

所以我的问题是:为什么 szData 不包含所有缓冲区的数据? (只有一个Thread运行此代码)因为在那种操作之后,我不希望 szData.charAt(iSizeData - 1)崩溃!

编辑: szData.getBytes()。length = 450566 。我认为存在编码问题。最好更好地使用byte []而不是String?

1 个答案:

答案 0 :(得分:1)

在Java中,charbyte,根据平台的默认字符编码,char最多可占用内存中的4个字节。你使用字节(二进制数据)或字符(字符串),你不能(轻松)在它们之间切换。

对于C语言中的strncasecmp之类的字符串操作,请使用String类的方法,例如String.compareToIgnoreCase(String str)。另请查看StringUtils库中的Apache Commons Lang类。