我有一个接受InputStream
(二进制数据)并将其序列化为 XML 的方法。为此,它使用 base64 编码器和 a 包装流Reader
以将其转换为字符数据。但是,由于InputStream
作为参数传入,我认为关闭流是有害的副作用,并且合同规定Reader.close()
它会这样做。如果我不关闭阅读器,编译器会警告我我有一个
资源泄漏:阅读器永远不会关闭
所以,我可以@SuppressWarnings( "resource" )
在读者声明中添加一个,但这是正确的做法吗?我错过了什么吗?
这是实际的代码:
/**
* Writes base64 encoded text read from the binary stream.
*
* @param binaryStream
* The binary stream to write from
* @return <code>this</code> 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;
}