See https://bugs.openjdk.java.net/browse/JDK-8026127 https://bugs.openjdk.java.net/browse/JDK-8026128
Stephen On 8 October 2013 21:33, Xueming Shen <[email protected]> wrote: > The 100 in sample really means a "big enough" buffer here for simple use > case, not > necessarily means a "fixed size' buffer. Sure there is always room for doc > improvement, > especially given this is the API has been there for decade. > > Deflater/Inflater.end() is for explicitly/proactively release of the memory > resource > held by the deflater/inflater, it does not have impact to the > deflating/inflating result. > the end() will be invoked by the finalizer. > > It might be reasonable to simply have a pair of static utility methods > > byte[] Deflater.deflate(byte[]); > byte[] Inflater.deflate(byte[]); > > For the casual/simple/easy use scenario. > > Sherman > > > On 10/08/2013 03:24 AM, Stephen Colebourne wrote: >> >> I've been trying to use Deflater today and found it rather tricky. Two >> thoughts... >> >> 1) The class level Javadoc specifies a fixed size byte array of 100. >> http://download.java.net/jdk8/docs/api/java/util/zip/Deflater.html >> >> > From what I can tell from other searching and basic common sense, this >> cannot be right as the output size could well be bigger than 100. >> However, there is no real information in the Deflater class as to how >> the class is supposed to be used. I don't believe that kind of broken >> example is helpful. >> >> The best I found was >> http://java.dzone.com/articles/how-compress-and-uncompress >> which proposed a loop: >> Deflater deflater = new Deflater(); >> deflater.setInput(data); >> ByteArrayOutputStream outputStream = new >> ByteArrayOutputStream(data.length); >> deflater.finish(); >> byte[] buffer = new byte[1024]; >> while (!deflater.finished()) { >> int count = deflater.deflate(buffer); // returns the generated code... >> index >> outputStream.write(buffer, 0, count); >> } >> outputStream.close(); >> byte[] output = outputStream.toByteArray(); >> >> Neither example call deflater.end(), which I believe to be a mistake as >> well. >> >> Is my analysis correct? Should I raise a bug for better documentation? >> (this appears to affect Inflater as well) >> >> 2) Even with the Javadoc change, the API is still far too complex. >> >> As a user, all I want is something like: >> byte[] compressed = Deflater.deflate(input, options...) >> and similar for Inflater. >> >> (I actually want to compress a String, and an override to handle that >> would be useful as well) >> >> Any thoughts on adding a convenience method to make the API a lot >> easier? Can I raise a bug for that? >> >> Stephen > >
