我有一个接受InputStream(二进制数据)并将其序列化为
XML的方法.为了做到这一点,它使用base64编码器和Reader包装流,将其转换为字符数据.但是,由于InputStream作为参数传入,我认为关闭流是一个有害的副作用,而Reader.close()的合同说它会这样做.如果我不关闭阅读器,编译器警告我,我有一个
Resource leak: reader is never closed
所以,我可以在读者声明中添加@SuppressWarnings(“资源”),但这是正确的做法吗?我错过了什么吗?
这是实际的代码:
/**
* Writes base64 encoded text read from the binary stream.
*
* @param binaryStream
* The binary stream to write from
* @return this
XmlWriter (for chaining)
* @throws IOException
*/
public XmlWriter binary( InputStream binaryStream ) throws IOException {
Reader reader = new InputStreamReader(
new Base64InputStream( binaryStream, true, base64LineLength, base64LineSeparator.getBytes( charset ) ) );
int bufferSize = 2048;
int charsRead;
char[] buffer = new char[bufferSize];
while ( (charsRead = reader.read( buffer, 0, bufferSize )) >= 0 ) {
writer.write( buffer, 0, charsRead );
}
return this;
}