【问题标题】:Same loop giving different output. Java IO相同的循环给出不同的输出。 Java IO
【发布时间】:2010-03-24 18:16:15
【问题描述】:

我面临一个非常奇怪的问题,即同一个循环在改变 BUFFER 值时不断给我不同的输出

  final int BUFFER = 100;
        char[] charArr = new char[BUFFER];
        StringBuffer objStringBuffer = new StringBuffer();
        while (objBufferedReader.read(charArr, 0,BUFFER) != -1) {
            objStringBuffer.append(charArr);
        }
 objFileWriter.write(objStringBuffer.toString());

当我将 BUFFER 大小更改为 500 时,它会给我一个 7 kb 的文件,当我将 BUFFER 大小更改为 100000 时,它会给出一个 400 kb 的文件,其中的内容一次又一次地重复。请帮忙。我应该怎么做才能防止这种情况发生?

【问题讨论】:

  • BUFFER 是用于指定缓冲区 大小 的变量的误导性名称。你应该叫它BUFFER_SIZE
  • 您的代码似乎不完整。 objBufferedReader 是如何定义的?

标签: java


【解决方案1】:

必须记住read()调用的返回值,因为read确实保证整个缓冲区已被填满。

您需要记住该值并在追加调用中使用它来仅追加那么多字符。

否则,您会将未初始化的字符附加到实际上并非来自 ReaderStringBuffer(可能是 0 或之前的 read() 调用写入的值)。

【讨论】:

  • 有一个StringBuffer函数可以实现这个目的:append(char str[], int offset, int len) 如果不需要同步,你应该顺便使用StringBuilder。
  • 干得好!谢谢约阿希姆。那真的很快
  • 好吧,老虎!感谢您的额外建议。我将其更改为 StringBuilder。我不需要任何同步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多