On Mon, 2006-04-03 at 18:57 -0600, Tom Tromey wrote: > Return 'sz' doesn't seem to be correct after the caller has read some > bytes. It is only correct the first time. I think you want > something like: > > final Inflater inf = new Inflater(true); > return new InflaterInputStream(....) { .... > return sz - inf.getTotalOut(); > > What do you think?
Yes, you are right. Thanks for pointing this out. 2006-04-04 Lillian Angel <[EMAIL PROTECTED]> * java/util/zip/ZipFile.java (getInputStream): Fixed to return size of ZipEntry minus the total bytes read. This guarantees that the right value is returned even if some bytes have already been read.
Index: java/util/zip/ZipFile.java =================================================================== RCS file: /sources/classpath/classpath/java/util/zip/ZipFile.java,v retrieving revision 1.31 diff -u -r1.31 ZipFile.java --- java/util/zip/ZipFile.java 3 Apr 2006 20:50:38 -0000 1.31 +++ java/util/zip/ZipFile.java 4 Apr 2006 14:03:12 -0000 @@ -445,13 +445,14 @@ case ZipOutputStream.STORED: return inp; case ZipOutputStream.DEFLATED: + final Inflater inf = new Inflater(true); final int sz = (int) entry.getSize(); - return new InflaterInputStream(inp, new Inflater(true)) + return new InflaterInputStream(inp, inf) { public int available() throws IOException { if (super.available() != 0) - return sz; + return sz - inf.getTotalOut(); return 0; } };