相同的循环提供不同的输出。Java输入输出

相同的循环提供不同的输出。Java输入输出,java,Java,我面临一个非常奇怪的问题,相同的循环在缓冲区值发生变化时不断给我不同的输出 final int BUFFER = 100; char[] charArr = new char[BUFFER]; StringBuffer objStringBuffer = new StringBuffer(); while (objBufferedReader.read(charArr, 0,BUFFER) != -1) { objStr

我面临一个非常奇怪的问题,相同的循环在缓冲区值发生变化时不断给我不同的输出

  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());

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

您必须记住
read()
调用的返回值,因为
read
不能保证整个缓冲区都已填满

您需要记住该值,并在append调用中使用它,以便只追加那么多字符


否则,您将向
StringBuffer
添加未初始化的字符,这些字符实际上不是来自
读取器
(可能是
0
或以前的
read()
调用写入的值)。

您必须记住
read()
调用的返回值,因为
read
不能保证整个缓冲区都已填满

您需要记住该值,并在append调用中使用它,以便只追加那么多字符


否则,您将向
StringBuffer
附加未初始化的字符,这些字符实际上不是来自
读取器
(可能是
0
或以前的
read()
调用写入的值)。

BUFFER
对于指定缓冲区大小的变量来说是一个误导性的名称。您可能应该称之为
缓冲区大小
。您的代码似乎不完整。objbuffereder是如何定义的?
BUFFER
对于指定缓冲区大小的变量来说是一个误导性的名称。您可能应该称之为
缓冲区大小
。您的代码似乎不完整。如何定义ObjBuffereDerader?有一个StringBuffer函数用于此目的:append(char str[],int offset,int len),如果不需要同步,您应该顺便使用StringBuilder。干得好!谢谢约阿希姆。那是真正的快克老虎!谢谢你的额外建议。我将把它改为StringBuilder。我不需要任何同步。有一个用于此目的的StringBuffer函数:append(char str[],int offset,int len),顺便说一下,如果不需要同步,您应该使用StringBuilder。干得好!谢谢约阿希姆。那是真正的快克老虎!谢谢你的额外建议。我将把它改为StringBuilder。我不需要任何同步。