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

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

如果在其上运行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);
}

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

最佳答案

我只是想建议您使用Commons IO:

IOUtils.copy(is, os);

然后快速浏览了copy()的源代码:
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = input.read(buffer))) {
    output.write(buffer, 0, n);
}

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

10-06 07:09