Do I need to close a Reader decorator of the java.io package? -


i need parse object , need wrap reader receive pushbackreader. need close pushbackreader in case or safe enough leave open since it's underlying reader (that didn't open)

with

public static myobject parse(reader reader) throws ioexception, parseexception {   pushbackreader preader = new pushbackreader(reader, pushback_size);   try {     return parsemyobject(preader);   } {     preader.close();   } } 

or safe enough write following:

public static myobject parse(reader reader) throws ioexception, parseexception {   return parsemyobject(new pushbackreader(reader, pushback_size)); } 

for info, here's how call parser:

bufferedreader reader = new bufferedreader(...); try {   while (...) {     list.add(myobjectparser.parse(reader));   } } catch (ioexception e) {   throw new runtimeexception("could not read stream", e); } catch (parseexception e) {   throw new parseruntimeexception("could not parse stream", e); } {   // no need null check.   reader.close(); } 

you don't need call close() on pushbackreader if callee closing underlying reader. pushbasereader wrapper buffer that'll garbage collected when you're done it. calling close() on close underlying reader, you'll want keep if expect method closing it.

update: based on code looks can't call close() on pushbackreader because it'll close underlying reader. next iteration should fail exception stream being closed if that, can see. e.g. example fails:

bufferedreader reader = new bufferedreader(new stringreader("foo")); new pushbackreader(reader).close(); reader.read(); // ioexception: stream closed 

Comments