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

Why String receiver's size is smaller than original ByteArrayOutputStream's size when I call toString()

我遇到了一个奇怪的问题。有些代码胜于长篇故事:

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) crashes!

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

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

对于 C 中的 strncasecmp 等字符串操作,请使用 String class, e.g. String.compareToIgnoreCase(String str). Also have a look at the StringUtils class from the Apache Commons Lang 库的方法。