## Licensed to the Apache Software Foundation (ASF) under one
## or more contributor license agreements.  See the NOTICE file
## distributed with this work for additional information
## regarding copyright ownership.  The ASF licenses this file
## to you under the Apache License, Version 2.0 (the
## "License"); you may not use this file except in compliance
## with the License.  You may obtain a copy of the License at
##
##  http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing,
## software distributed under the License is distributed on an
## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
## KIND, either express or implied.  See the License for the
## specific language governing permissions and limitations
## under the License.
              ${project.name} RELEASE NOTES

$introduction.replaceAll("(?<!\015)\012", "
")

## N.B. the available variables are described here:
## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html
## Hack to improve layout: replace all pairs of spaces with a single new-line
$release.description.replaceAll("  ", "
")

## Fix up indentation for multi-line action descriptions
#macro ( indent )
#set($action=$action.replaceAll("(?m)^  +","  "))
#end
#if ($release.getActions().size() == 0)
No changes defined in this version.
#else
#if ($release.getActions('add').size() !=0)
New features:
#foreach($actionItem in $release.getActions('add'))
## Use replaceAll to fix up LF-only line ends on Windows.
#set($action=$actionItem.getAction().replaceAll("\n","
"))
#indent()
#if ($actionItem.getIssue())
#set($issue=$actionItem.getIssue())
#else
#set($issue="")
#end
#if ($actionItem.getDueTo())
#set($dueto=$actionItem.getDueTo())
#else
#set($dueto="")
#end
o ${action}##
#if($!issue != "")

  Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end
#else#if($!dueto != "") Thanks to $dueto. #end
#end

#set($issue="")
#set($dueto="")
#end 
#end

#if ($release.getActions('fix').size() !=0)
Fixed Bugs:
#foreach($actionItem in $release.getActions('fix'))
## Use replaceAll to fix up LF-only line ends on Windows.
#set($action=$actionItem.getAction().replaceAll("\n","
"))
#indent()
#if ($actionItem.getIssue())
#set($issue=$actionItem.getIssue())
#else
#set($issue="")
#end
#if ($actionItem.getDueTo())
#set($dueto=$actionItem.getDueTo())
#else
#set($dueto="")
#end
o ${action}##
#if($!issue != "")

  Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end
#else#if($!dueto != "") Thanks to $dueto. #end
#end

#set($issue="")
#set($dueto="")
#end
#end

#if ($release.getActions('update').size() !=0)
Changes:
#foreach($actionItem in $release.getActions('update'))
## Use replaceAll to fix up LF-only line ends on Windows.
#set($action=$actionItem.getAction().replaceAll("\n","
"))
#indent()
#if ($actionItem.getIssue())
#set($issue=$actionItem.getIssue())
#else
#set($issue="")
#end
#if ($actionItem.getDueTo())
#set($dueto=$actionItem.getDueTo())
#else
#set($dueto="")
#end
o ${action}##
#if($!issue != "")

  Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end
#else#if($!dueto != "") Thanks to $dueto. #end
#end

#set($issue="")
#set($dueto="")
#end
#end

#if ($release.getActions('remove').size() !=0)
Removed:
#foreach($actionItem in $release.getActions('remove'))
## Use replaceAll to fix up LF-only line ends on Windows.
#set($action=$actionItem.getAction().replaceAll("\n","
"))
#indent()
#if ($actionItem.getIssue())
#set($issue=$actionItem.getIssue())
#else
#set($issue="")
#end
#if ($actionItem.getDueTo())
#set($dueto=$actionItem.getDueTo())
#else
#set($dueto="")
#end
o ${action}##
#if($!issue != "")

  Issue: $issue. #if($!dueto != "")Thanks to $dueto. #end
#else#if($!dueto != "") Thanks to $dueto. #end
#end

#set($issue="")
#set($dueto="")
#end
#end
## End of main loop
#end
#macro ( fixurl $url )
$url.replaceAll("proper/commons-","")
#end
For complete information on ${project.name}, including instructions
on how to submit bug reports, patches, or suggestions for improvement,
see the ${project.name} website:

#fixurl ( ${project.url} )

Old Release Notes
=================

Release 1.9
-----------

New features:
o Added support for DEFLATE streams without any gzip framing.
  Issue: COMPRESS-263.
  Thanks to Matthias Stevens.

Fixed Bugs:
o When reading 7z files unknown file properties and properties of type
  kDummy are now ignored.
  Issue: COMPRESS-287.
o Expanding 7z archives using LZMA compression could cause an
  EOFException.
  Issue: COMPRESS-286. 
o Long-Name and -link or PAX-header entries in TAR archives always had
  the current time as last modfication time, creating archives that
  are different at the byte level each time an archive was built.
  Issue: COMPRESS-289.
  Thanks to Bob Robertson.

Changes:
o Checking for XZ for Java may be expensive.  The result will now be
  cached outside of an OSGi environment.  You can use the new
  XZUtils#setCacheXZAvailability to overrride this default behavior.
  Issue: COMPRESS-285.

Release 1.8.1
-------------

New features:
o COMPRESS-272:  CompressorStreamFactory can now auto-detect Unix compress
                 (".Z") streams. 

Fixed Bugs:
o COMPRESS-270:  The snappy, ar and tar inputstreams might fail to read from a
                 non-buffered stream in certain cases. 
o COMPRESS-277:  IOUtils#skip might skip fewer bytes than requested even though
                 more could be read from the stream. 
o COMPRESS-276:  ArchiveStreams now validate there is a current entry before
                 reading or writing entry data. 
o ArjArchiveInputStream#canReadEntryData tested the current
                 entry of the stream rather than its argument. 
o COMPRESS-274:  ChangeSet#delete and deleteDir now properly deal with unnamed
                 entries. 
o COMPRESS-273:  Added a few null checks to improve robustness. 
o COMPRESS-278:  TarArchiveInputStream failed to read archives with empty
                 gid/uid fields. 
o COMPRESS-279:  TarArchiveInputStream now again throws an exception when it
                 encounters a truncated archive while reading from the last
                 entry. 
o COMPRESS-280:  Adapted TarArchiveInputStream#skip to the modified
                 IOUtils#skip method. Thanks to BELUGA BEHR. 

Changes:
o The dependency on org.tukaani:xz is now marked as optional. 

Release 1.8
-----------

New features:
o GzipCompressorInputStream now provides access to the same
  metadata that can be provided via GzipParameters when writing
  a gzip stream.
  Issue: COMPRESS-260. 
o SevenZOutputFile now supports chaining multiple
  compression/encryption/filter methods and passing options to
  the methods.
  Issue: COMPRESS-266. 
o The (compression) method(s) can now be specified per entry in
  SevenZOutputFile.
  Issue: COMPRESS-261. 
o SevenZArchiveEntry "knows" which method(s) have been used to
  write it to the archive.
  Issue: COMPRESS-258. 
o The 7z package now supports the delta filter as method. 
o The 7z package now supports BCJ filters for several platforms.
  You will need a version >= 1.5 of XZ for Java to read archives
  using BCJ, though.
  Issue: COMPRESS-257. 

Fixed Bugs:
o BZip2CompressorInputStream read fewer bytes than possible from
  a truncated stream.
  Issue: COMPRESS-253. 
o SevenZFile failed claiming the dictionary was too large when
  archives used LZMA compression for headers and content and
  certain non-default dictionary sizes.
  Issue: COMPRESS-253. 
o CompressorStreamFactory.createCompressorInputStream with
  explicit compression did not honor decompressConcatenated
  Issue: COMPRESS-259. 
o TarArchiveInputStream will now read archives created by tar
  implementations that encode big numbers by not adding a
  trailing NUL.
  Issue: COMPRESS-262. 
o ZipArchiveInputStream would return NUL bytes for the first 512
  bytes of a STORED entry if it was the very first entry of the
  archive.
  Issue: COMPRESS-264. 
o When writing PAX/POSIX headers for TAR entries with
  backslashes or certain non-ASCII characters in their name
  TarArchiveOutputStream could fail.
  Issue: COMPRESS-265. 
o ArchiveStreamFactory now throws a StreamingNotSupported - a
  new subclass of ArchiveException - if it is asked to read from
  or write to a stream and Commons Compress doesn't support
  streaming for the format.  This currently only applies to the
  7z format.
  Issue: COMPRESS-267. 

Release 1.7
-----------

New features:
o Read-Only support for Snappy compression.
  Issue: COMPRESS-147. Thanks to BELUGA BEHR.
o Read-Only support for .Z compressed files.
  Issue: COMPRESS-243. Thanks to Damjan Jovanovic.
o ZipFile and ZipArchiveInputStream now support reading entries
  compressed using the SHRINKING method. Thanks to Damjan Jovanovic.
o GzipCompressorOutputStream now supports setting the compression
  level and the header metadata (filename, comment, modification time,
  operating system and extra flags)
  Issue: COMPRESS-250. Thanks to Emmanuel Bourg.
o ZipFile and ZipArchiveInputStream now support reading entries
  compressed using the IMPLODE method.
  Issue: COMPRESS-115. Thanks to Emmanuel Bourg.
o ZipFile and the 7z file classes now implement Closeable and can be
  used in try-with-resources constructs.

Fixed Bugs:
o SevenZOutputFile#closeArchiveEntry throws an exception when using
  LZMA2 compression on Java8.  Issue: COMPRESS-241.
o 7z reading of big 64bit values could be wrong.
  Issue: COMPRESS-244. Thanks to Nico Kruber.
o TarArchiveInputStream could fail to read an archive completely.
  Issue: COMPRESS-245.
o The time-setters in X5455_ExtendedTimestamp now set the
  corresponding flags explicitly - i.e. they set the bit if the valus
  is not-null and reset it otherwise.  This may cause
  incompatibilities if you use setFlags to unset a bit and later set
  the time to a non-null value - the flag will now be set.
  Issue: COMPRESS-242.
o SevenZOutputFile would create invalid archives if more than six
  empty files or directories were included.  Issue: COMPRESS-252.

Release 1.6
-----------

Version 1.6 introduces changes to the internal API of the tar package that 
break backwards compatibility in the following rare cases.  This version 
removes the package private TarBuffer class along with the protected "buffer" 
members in TarArchiveInputStream and TarArchiveOutputStream.  This change will 
only affect you if you have created a subclass of one of the stream classes 
and accessed the buffer member or directly used the TarBuffer class.

Changes in this version include:

New features:
o Added support for 7z archives.  Most compression algorithms
  can be read and written, LZMA and encryption are only
  supported when reading.  Issue: COMPRESS-54. Thanks to Damjan Jovanovic. 
o Added read-only support for ARJ archives that don't use
  compression.  Issue: COMPRESS-226. Thanks to Damjan Jovanovic. 
o DumpArchiveInputStream now supports an encoding parameter that
  can be used to specify the encoding of file names. 
o The CPIO streams now support an encoding parameter that can be
  used to specify the encoding of file names. 
o Read-only support for LZMA standalone compression has been added.
  Issue: COMPRESS-111.

Fixed Bugs:
o TarBuffer.tryToConsumeSecondEOFRecord could throw a
  NullPointerException  Issue: COMPRESS-223. Thanks to Jeremy Gustie. 
o Parsing of zip64 extra fields has become more lenient in order
  to be able to read archives created by DotNetZip and maybe
  other archivers as well.  Issue: COMPRESS-228. 
o TAR will now properly read the names of symbolic links with
  long names that use the GNU variant to specify the long file
  name.  Issue: COMPRESS-229. Thanks to Christoph Gysin. 
o ZipFile#getInputStream could return null if the archive
  contained duplicate entries.
  The class now also provides two new methods to obtain all
  entries of a given name rather than just the first one.
  Issue: COMPRESS-227. 
o CpioArchiveInputStream failed to read archives created by
  Redline RPM.  Issue: COMPRESS-236. Thanks to Andrew Duffy. 
o TarArchiveOutputStream now properly handles link names that
  are too long to fit into a traditional TAR header.  Issue:
  COMPRESS-237. Thanks to Emmanuel Bourg.
o The auto-detecting create*InputStream methods of Archive and
  CompressorStreamFactory could fail to detect the format of
  blocking input streams.  Issue: COMPRESS-239. 

Changes:
o Readabilty patch to TarArchiveInputStream.  Issue:
  COMPRESS-232. Thanks to BELUGA BEHR.
o Performance improvements to TarArchiveInputStream, in
  particular to the skip method.  Issue: COMPRESS-234. Thanks to
  BELUGA BEHR. 

Release 1.5
-----------

New features:

o CompressorStreamFactory has an option to create decompressing
  streams that decompress the full input for formats that support
  multiple concatenated streams.
  Issue: COMPRESS-220.

Fixed Bugs:

o Typo in CompressorStreamFactory Javadoc
  Issue: COMPRESS-218.
  Thanks to Gili.
o ArchiveStreamFactory's tar stream detection created false positives
  for AIFF files.
  Issue: COMPRESS-191.
  Thanks to Jukka Zitting.
o XZ for Java didn't provide an OSGi bundle.  Compress' dependency on
  it has now been marked optional so Compress itself can still be used
  in an OSGi context.
  Issue: COMPRESS-199.
  Thanks to Jukka Zitting.
o When specifying the encoding explicitly TarArchiveOutputStream would
  write unreadable names in GNU mode or even cause errors in POSIX
  mode for file names longer than 66 characters.
  Issue: COMPRESS-200.
  Thanks to Christian Schlichtherle.
o Writing TAR PAX headers failed if the generated entry name ended
  with a "/".
  Issue: COMPRESS-203.
o ZipArchiveInputStream sometimes failed to provide input to the
  Inflater when it needed it, leading to reads returning 0.
  Issue: COMPRESS-189.
  Thanks to Daniel Lowe.
o TarArchiveInputStream ignored the encoding for GNU long name
  entries.
  Issue: COMPRESS-212.
o TarArchiveInputStream could leave the second EOF record inside the
  stream it had just finished reading.
  Issue: COMPRESS-206.
  Thanks to Peter De Maeyer.
o DumpArchiveInputStream no longer implicitly closes the original
  input stream when it reaches the end of the archive.
o ZipArchiveInputStream now consumes the remainder of the archive when
  getNextZipEntry returns null.
o Unit tests could fail if the source tree was checked out to a
  directory tree containign spaces.
  Issue: COMPRESS-205.
  Thanks to Daniel Lowe.
o Fixed a potential ArrayIndexOutOfBoundsException when reading STORED
  entries from ZipArchiveInputStream.
  Issue: COMPRESS-219.
o CompressorStreamFactory can now be used without XZ for Java being
  available.
  Issue: COMPRESS-221.

Changes:

o Improved exception message if a zip archive cannot be read because
  of an unsupported compression method.
  Issue: COMPRESS-188.
  Thanks to Harald Kuhn.
o ArchiveStreamFactory has a setting for file name encoding that sets
  up encoding for ZIP and TAR streams.
  Issue: COMPRESS-192.
  Thanks to Jukka Zitting.
o TarArchiveEntry now has a method to verify its checksum.
  Issue: COMPRESS-191.
  Thanks to Jukka Zitting.
o Split/spanned ZIP archives are now properly detected by
  ArchiveStreamFactory but will cause an
  UnsupportedZipFeatureException when read.
o ZipArchiveInputStream now reads archives that start with a "PK00"
  signature.  Archives with this signatures are created when the
  archiver was willing to split the archive but in the end only needed
  a single segment - so didn't split anything.
  Issue: COMPRESS-208.
o TarArchiveEntry has a new constructor that allows setting linkFlag
  and preserveLeadingSlashes at the same time.
  Issue: COMPRESS-201.
o ChangeSetPerformer has a new perform overload that uses a ZipFile
  instance as input.
  Issue: COMPRESS-159.
o Garbage collection pressure has been reduced by reusing temporary
  byte arrays in classes.
  Issue: COMPRESS-172.
  Thanks to Thomas Mair.
o Can now handle zip extra field 0x5455 - Extended Timestamp.
  Issue: COMPRESS-210.
  Thanks to Julius Davies.
o handle zip extra field 0x7875 - Info Zip New Unix Extra Field.
  Issue: COMPRESS-211.
  Thanks to Julius Davies.
o ZipShort, ZipLong, ZipEightByteInteger should implement Serializable
  Issue: COMPRESS-213.
  Thanks to Julius Davies.
o better support for unix symlinks in ZipFile entries.
  Issue: COMPRESS-214.
  Thanks to Julius Davies.
o ZipFile's initialization has been improved for non-Zip64 archives.
  Issue: COMPRESS-215.
  Thanks to Robin Power.
o Updated XZ for Java dependency to 1.2 as this version provides
  proper OSGi manifest attributes.

Release 1.4.1
-------------

This is a security bugfix release, see
https://commons.apache.org/proper/commons-compress/security.html#Fixed_in_Apache_Commons_Compress_1.4.1

Fixed Bugs:

o Ported libbzip2's fallback sort algorithm to
  BZip2CompressorOutputStream to speed up compression in certain
  edge cases.

Release 1.4
-----------

New features:
o COMPRESS-156:  Support for the XZ format has been added. 

Fixed Bugs:
o COMPRESS-183:  The tar package now allows the encoding of file names to be
                 specified and can optionally use PAX extension headers to
                 write non-ASCII file names.
                 The stream classes now write (or expect to read) archives that
                 use the platform's native encoding for file names.  Apache
                 Commons Compress 1.3 used to strip everything but the lower
                 eight bits of each character which effectively only worked for
                 ASCII and ISO-8859-1 file names.
                 This new default behavior is a breaking change. 
o COMPRESS-184:  TarArchiveInputStream failed to parse PAX headers that
                 contained non-ASCII characters. 
o COMPRESS-178:  TarArchiveInputStream throws IllegalArgumentException instead of IOException 
o COMPRESS-179:  TarUtils.formatLongOctalOrBinaryBytes() assumes the field will be 12 bytes long 
o COMPRESS-175:  GNU Tar sometimes uses binary encoding for UID and GID 
o COMPRESS-171:  ArchiveStreamFactory.createArchiveInputStream would claim
                 short text files were TAR archives. 
o COMPRESS-164:  ZipFile didn't work properly for archives using unicode extra
                 fields rather than UTF-8 filenames and the EFS-Flag. 
o COMPRESS-169:  For corrupt archives ZipFile would throw a RuntimeException in
                 some cases and an IOException in others.  It will now
                 consistently throw an IOException. 

Changes:
o COMPRESS-182:  The tar package can now write archives that use star/GNU/BSD
                 extensions or use the POSIX/PAX variant to store numeric
                 values that don't fit into the traditional header fields. 
o COMPRESS-181:  Added a workaround for a Bug some tar implementations that add
                 a NUL byte as first byte in numeric header fields. 
o COMPRESS-176:  Added a workaround for a Bug in WinZIP which uses backslashes
                 as path separators in Unicode Extra Fields. 
o COMPRESS-131:  ArrayOutOfBounds while decompressing bz2. Added test case - code already seems to have been fixed. 
o COMPRESS-146:  BZip2CompressorInputStream now optionally supports reading of
                 concatenated .bz2 files. 
o COMPRESS-154:  GZipCompressorInputStream now optionally supports reading of
                 concatenated .gz files. 
o COMPRESS-16:  The tar package can now read archives that use star/GNU/BSD
                 extensions for files that are longer than 8 GByte as well as
                 archives that use the POSIX/PAX variant. 
o COMPRESS-165:  The tar package can now write archives that use star/GNU/BSD
                 extensions for files that are longer than 8 GByte as well as
                 archives that use the POSIX/PAX variant. 
o COMPRESS-166:  The tar package can now use the POSIX/PAX variant for writing
                 entries with names longer than 100 characters. 

Release 1.3
-----------

Commons Compress 1.3 is the first version to require Java5 at runtime.

Changes in this version include:

New features:
o Support for the Pack200 format has been added.  Issue: COMPRESS-142. 
o Read-only support for the format used by the Unix dump(8) tool
  has been added.  Issue: COMPRESS-132. 

Fixed Bugs:
o BZip2CompressorInputStream's getBytesRead method always
  returned 0. 
o ZipArchiveInputStream and ZipArchiveOutputStream could leak
  resources on some JDKs.  Issue: COMPRESS-152. 
o TarArchiveOutputStream's getBytesWritten method didn't count
  correctly.  Issue: COMPRESS-160. 

Changes:
o The ZIP package now supports Zip64 extensions.  Issue: COMPRESS-36. 
o The AR package now supports the BSD dialect of storing file
  names longer than 16 chars (both reading and writing).
  Issue: COMPRESS-144. 

Release 1.2
-----------

New features:
o COMPRESS-123:  ZipArchiveEntry has a new method getRawName that provides the
        original bytes that made up the name.  This may allow user
        code to detect the encoding. 
o COMPRESS-122:  TarArchiveEntry provides access to the flags that determine
        whether it is an archived symbolic link, pipe or other
        "uncommon" file system object. 

Fixed Bugs:
o COMPRESS-129:  ZipArchiveInputStream could fail with a "Truncated ZIP" error
        message for entries between 2 GByte and 4 GByte in size. 
o COMPRESS-145:  TarArchiveInputStream now detects sparse entries using the
        oldgnu format and properly reports it cannot extract their
        contents. 
o COMPRESS-130:  The Javadoc for ZipArchiveInputStream#skip now matches the
        implementation, the code has been made more defensive. 
o COMPRESS-140:  ArArchiveInputStream fails if entries contain only blanks for
        userId or groupId. Thanks to Trejkaz. 
o COMPRESS-139:  ZipFile may leak resources on some JDKs. 
o COMPRESS-125:  BZip2CompressorInputStream throws IOException if
        underlying stream returns available() == 0.
        Removed the check. 
o COMPRESS-127:  Calling close() on inputStream returned by
        CompressorStreamFactory.createCompressorInputStream()
        does not close the underlying input stream. 
o COMPRESS-119:  TarArchiveOutputStream#finish now writes all buffered
        data to the stream 

Changes:
o ZipFile now implements finalize which closes the underlying
        file. 
o COMPRESS-117:  Certain tar files not recognised by
        ArchiveStreamFactory. 

Release 1.1
-----------

New features:
o COMPRESS-108:  Command-line interface to list archive contents.
       Usage: java -jar commons-compress-n.m.jar archive-name [zip|tar|etc] 
o COMPRESS-109:  Tar implementation does not support Pax headers
       Added support for reading pax headers.
       Note: does not support global pax headers 
o COMPRESS-103:  ZipArchiveInputStream can optionally extract data that used
        the STORED compression method and a data descriptor.
        Doing so in a stream is not safe in general, so you have to
        explicitly enable the feature.  By default the stream will
        throw an exception if it encounters such an entry. 
o COMPRESS-98:  The ZIP classes will throw specialized exceptions if any
        attempt is made to read or write data that uses zip features
        not supported (yet). 
o COMPRESS-99:  ZipFile#getEntries returns entries in a predictable order -
        the order they appear inside the central directory.
        A new method getEntriesInPhysicalOrder returns entries in
        order of the entry data, i.e. the order ZipArchiveInputStream
        would see. 
o The Archive*Stream and ZipFile classes now have
        can(Read|Write)EntryData methods that can be used to check
        whether a given entry's data can be read/written.
        The method currently returns false for ZIP archives if an
        entry uses an unsupported compression method or encryption. 
o COMPRESS-89:  The ZIP classes now detect encrypted entries. 
o COMPRESS-97:  Added autodetection of compression format to
        CompressorStreamFactory. 
o COMPRESS-95:  Improve ExceptionMessages in ArchiveStreamFactory Thanks to Joerg Bellmann. 
o A new constructor of TarArchiveEntry can create entries with
        names that start with slashes - the default is to strip
        leading slashes in order to create relative path names. 
o ArchiveEntry now has a getLastModifiedDate method. 
o COMPRESS-78:  Add a BZip2Utils class modelled after GZipUtils Thanks to Jukka Zitting. 

Fixed Bugs:
o COMPRESS-72:  Move acknowledgements from NOTICE to README 
o COMPRESS-113:  TarArchiveEntry.parseTarHeader() includes the trailing space/NUL when parsing the octal size 
o COMPRESS-118:  TarUtils.parseName does not properly handle characters outside the range 0-127 
o COMPRESS-107:  ArchiveStreamFactory does not recognise tar files created by Ant 
o COMPRESS-110:  Support "ustar" prefix field, which is used when file paths are longer
       than 100 characters. 
o COMPRESS-100:  ZipArchiveInputStream will throw an exception if it detects an
        entry that uses a data descriptor for a STORED entry since it
        cannot reliably find the end of data for this "compression"
        method. 
o COMPRESS-101:  ZipArchiveInputStream should now properly read archives that
        use data descriptors but without the "unofficial" signature. 
o COMPRESS-74:  ZipArchiveInputStream failed to update the number of bytes
        read properly. 
o ArchiveInputStream has a new method getBytesRead that should
        be preferred over getCount since the later may truncate the
        number of bytes read for big archives. 
o COMPRESS-85:  The cpio archives created by CpioArchiveOutputStream couldn't
        be read by many existing native implementations because the
        archives contained multiple entries with the same inode/device
        combinations and weren't padded to a blocksize of 512 bytes. 
o COMPRESS-73:  ZipArchiveEntry, ZipFile and ZipArchiveInputStream are now
        more lenient when parsing extra fields. 
o COMPRESS-82:  cpio is terribly slow.
        Documented that buffered streams are needed for performance 
o Improved exception message if the extra field data in ZIP
        archives cannot be parsed. 
o COMPRESS-17:  Tar format unspecified - current support documented. 
o COMPRESS-94:  ZipArchiveEntry's equals method was broken for entries created
        with the String-arg constructor.  This lead to broken ZIP
        archives if two different entries had the same hash code. Thanks to Anon Devs. 
o COMPRESS-87:  ZipArchiveInputStream could repeatedly return 0 on read() when
        the archive was truncated. Thanks to Antoni Mylka. 
o COMPRESS-86:  Tar archive entries holding the file name for names longer
        than 100 characters in GNU longfile mode didn't properly
        specify they'd be using the "oldgnu" extension. 
o COMPRESS-83:  Delegate all read and write methods in GZip stream in order to
        speed up operations. 
o The ar and cpio streams now properly read and write last
        modified times. 
o COMPRESS-81:  TarOutputStream can leave garbage at the end of the archive 

Changes:
o COMPRESS-112:  ArArchiveInputStream does not handle GNU extended filename records (//) 
o COMPRESS-105:  Document that the name of an ZipArchiveEntry determines whether
       an entry is considered a directory or not.
       If you don't use the constructor with the File argument the entry's
        name must end in a "/" in order for the entry to be known as a directory. 
o COMPRESS-79:  Move DOS/Java time conversions into Zip utility class. 
o COMPRESS-75:  ZipArchiveInputStream does not show location in file
       where a problem occurred. 

