Win a copy of The Java Performance Companion this week in the Performance forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Order of close() statements GZIP

 
bob connolly
Ranch Hand
Posts: 204
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello,

When i have the files nested this way, is there an order that the close statements should be in?

I keep getting a Corrupt GZIP trailer for some reason!

Thanks much!


GZIPInputStream in = null;
GZIPOutputStream gz = null;
PrintWriter outf = null;
byte[] buf=new byte[4096];

try
{
gz = new GZIPOutputStream(new FileOutputStream(xml_file));
outf = new PrintWriter (gz);
......
} catch ......

in.close();
gz.finish();
gz.close();
outf.close();
 
Ernest Friedman-Hill
author and iconoclast
Marshal
Pie
Posts: 24211
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The PrintWriter will line-buffer the output; the last line won't necessarily be sent along until you call flush() on the PrintWriter, or until you close it. So by closing the gzip stream first, you're actually closing it before all the data can be sent to it.

You actually only need to call close on the PrintWriter; it will call close on the gzip stream, which will in turn close the file stream, and everything will work fine.
 
Consider Paul's rocket mass heater.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic