我有一段代码用于流复制。
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循环可以解决问题?