java中符合PMD的流复制

rom*_*oll 5 java pmd while-loop

我有一段用于流复制的代码。

OutputStream os = ...;
InputStream is = ...;
int bufferLength;
byte[] buffer = new byte[1024];
while ((bufferLength = is.read(buffer)) != -1) {
   os.write(buffer, 0, bufferLength);
}
Run Code Online (Sandbox Code Playgroud)

如果我在它上面运行 PMD,我会收到以下警告http://pmd.sourceforge.net/rules/controversial.html#AssignmentInOperand

现在我希望摆脱那个警告,但我能想到的唯一选择是

OutputStream os = ...;
InputStream is = ...;
int bufferLength;
byte[] buffer = new byte[1024];
bufferLength = is.read(buffer);
while (bufferLength != -1) {
   os.write(buffer, 0, bufferLength);
   bufferLength = is.read(buffer);
}
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢那样,因为我最终会复制代码。有没有更优雅的方式来满足这个 PMD 规则?

Tom*_*icz 3

我只是想建议您使用Commons IO

IOUtils.copy(is, os);
Run Code Online (Sandbox Code Playgroud)

然后我快速浏览了以下源代码copy()

byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = input.read(buffer))) {
    output.write(buffer, 0, n);
}
Run Code Online (Sandbox Code Playgroud)

我假设您的代码是有效的并保持原样。或者也许 do-while 循环可以解决问题?