我面临着一个奇怪的问题。有些代码比长篇故事更好:
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?
答案 0 :(得分:1)
在Java中,char
≠byte
,根据平台的默认字符编码,char
最多可占用内存中的4个字节。你使用字节(二进制数据)或字符(字符串),你不能(轻松)在它们之间切换。
对于C语言中的strncasecmp
之类的字符串操作,请使用String类的方法,例如String.compareToIgnoreCase(String str)。另请查看StringUtils库中的Apache Commons Lang类。