【发布时间】:2023-03-06 08:52:02
【问题描述】:
我的代码中有一个奇怪的错误。我正在尝试使用 char 缓冲区从 InputStreamReader 读取一些字符并将其附加到 StringBuilder。
sn-p 在这里:
char[] buffer = new char[4096];
int numRead = 0;
webResource = new StringBuilder("");
while ( (numRead = reader.read(buffer, 0, 4096)) != -1 )
{
System.out.println("Capacity before: "+webResource.capacity());
webResource.append(buffer, 0, numRead);
System.out.println("Capacity after: "+webResource.capacity());
}
System.out.println() 仅用于调试目的。
我正在尝试阅读具有 147 781 个字符的 InputStream。在 while 循环中的前两次一切正常,我将字符读入缓冲区,然后将其附加到 webResource (StringBuilder)。
但在第三次迭代中,我读取缓冲 4096 个字符,但只有 1446 个字符附加到 webResource (StringBuilder)。
我一直在 Eclipse 中调试代码,并在观察变量 webResource 时发现,在第三次迭代之后(附加 1446 个字符后)变量的内容只是以“...”结尾并且没有新字符在下一次迭代中添加。
奇怪的是,webResource.count 正在正确地增加(经过四次交互后,其值为 16 384,依此类推)。
请问有人可以帮忙吗?我真的不明白为什么我不能将整个inputstream 附加到StringBuilder 的问题出在哪里,我只能附加前 9 638 个字符。
提前致谢。
【问题讨论】:
-
很难说这里出了什么问题。尝试发布带有
InputStream来源的SSCCE 供我们测试。 -
附带说明,为什么不直接使用:
IOUtils.toString()?
标签: java eclipse stringbuilder