【问题标题】:Java StringBuilder doesn't append whole InputStreamJava StringBuilder 不会附加整个 InputStream
【发布时间】: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


【解决方案1】:

您似乎误解了您在调试器中看到的内容。调试器没有向您显示 stringbuilder 的全部内容,因为它太长了。但它都在那里。,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2018-09-22
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多