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
Post a Comment