private void migrateArchiveStreaming()

in src/main/java/org/apache/tomcat/jakartaee/Migration.java [302:344]


    private void migrateArchiveStreaming(InputStream src, OutputStream dest) throws IOException {
        try (ZipArchiveInputStream srcZipStream = new ZipArchiveInputStream(CloseShieldInputStream.wrap(src));
                ZipArchiveOutputStream destZipStream = new ZipArchiveOutputStream(CloseShieldOutputStream.wrap(dest))) {
            ZipArchiveEntry srcZipEntry;
            CRC32 crc32 = new CRC32();
            while ((srcZipEntry = srcZipStream.getNextZipEntry()) != null) {
                String srcName = srcZipEntry.getName();
                if (isSignatureFile(srcName)) {
                    logger.log(Level.WARNING, sm.getString("migration.skipSignatureFile", srcName));
                    continue;
                }
                if (srcZipEntry.getSize() > ZIP64_THRESHOLD_LENGTH ||
                        srcZipEntry.getCompressedSize() > ZIP64_THRESHOLD_LENGTH) {
                    logger.log(Level.WARNING, sm.getString("migration.jdk8303866", srcName));
                } else {
                    // Avoid JDK bug - https://bugs.openjdk.org/browse/JDK-8303866
                    if (srcZipEntry.getExtraField(EXTRA_FIELD_ZIP64) != null) {
                        srcZipEntry.removeExtraField(EXTRA_FIELD_ZIP64);
                    }
                }
                String destName = profile.convert(srcName);
                if (srcZipEntry.getMethod() == ZipEntry.STORED) {
                    ByteArrayOutputStream tempBuffer = new ByteArrayOutputStream((int) (srcZipEntry.getSize() * 1.05));
                    migrateStream(srcName, srcZipStream, tempBuffer);
                    crc32.update(tempBuffer.toByteArray(), 0, tempBuffer.size());
                    MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
                    destZipEntry.setName(destName);
                    destZipEntry.setSize(tempBuffer.size());
                    destZipEntry.setCrc(crc32.getValue());
                    destZipStream.putArchiveEntry(destZipEntry);
                    tempBuffer.writeTo(destZipStream);
                    destZipStream.closeArchiveEntry();
                    crc32.reset();
                } else {
                    MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
                    destZipEntry.setName(destName);
                    destZipStream.putArchiveEntry(destZipEntry);
                    migrateStream(srcName, srcZipStream, destZipStream);
                    destZipStream.closeArchiveEntry();
                }
            }
        }
    }