@Override public void closeArchiveEntry() throws IOException {
  if (finished) {
    throw new IOException("Stream has already been finished");
  }
  if (entry == null) {
    throw new IOException("No current entry to close");
  }
  if (!entry.hasWritten) {
    write(EMPTY,0,0);
  }
  flushDeflater();
  final Zip64Mode effectiveMode=getEffectiveZip64Mode(entry.entry);
  long bytesWritten=written - entry.dataStart;
  long realCrc=crc.getValue();
  crc.reset();
  final boolean actuallyNeedsZip64=handleSizesAndCrc(bytesWritten,realCrc,effectiveMode);
  if (raf != null) {
    rewriteSizesAndCrc(actuallyNeedsZip64);
  }
  writeDataDescriptor(entry.entry);
  entry=null;
}

@ Override public void closeArchiveEntry ( ) throws IOException { if ( finished ) { throw new IOException ( "Stream has already been finished" ) ; } if ( entry == null ) { throw new IOException ( "No current entry to close" ) ; } if ( ! entry . hasWritten ) { write ( EMPTY , 0 , 0 ) ; } flushDeflater ( ) ; final Zip64Mode effectiveMode = getEffectiveZip64Mode ( entry . entry ) ; long bytesWritten = written - entry . dataStart ; long realCrc = crc . getValue ( ) ; crc . reset ( ) ; final boolean actuallyNeedsZip64 = handleSizesAndCrc ( bytesWritten , realCrc , effectiveMode ) ; if ( raf != null ) { rewriteSizesAndCrc ( actuallyNeedsZip64 ) ; } writeDataDescriptor ( entry . entry ) ; entry = null ; }
writes all necessary data for this entry .
