gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:38:55 26 4
gpt4 key购买 nike

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

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不包含缓冲区的所有数据? (只有一个线程运行此代码)因为在这种操作之后,我不希望 szData.charAt(iSizeData - 1) 崩溃!

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

最佳答案

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

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

关于java - 为什么当我调用 toString() 时 String 接收器的大小小于原始 ByteArrayOutputStream 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com