相同的循环提供不同的输出。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。我不需要任何同步。