From 220acd1d863dfeba71a1cf4a51a664a0010bff2c Mon Sep 17 00:00:00 2001 From: Peter Thomas Date: Thu, 20 Jul 2023 21:13:14 +0530 Subject: [PATCH] use nio for some operations --- .../main/java/com/intuit/karate/job/JobUtils.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/karate-core/src/main/java/com/intuit/karate/job/JobUtils.java b/karate-core/src/main/java/com/intuit/karate/job/JobUtils.java index c09ed028f..f13408b1c 100644 --- a/karate-core/src/main/java/com/intuit/karate/job/JobUtils.java +++ b/karate-core/src/main/java/com/intuit/karate/job/JobUtils.java @@ -27,6 +27,8 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; import java.util.function.Predicate; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -76,10 +78,15 @@ private static void zip(File fileToZip, String fileName, ZipOutputStream zipOut, ZipEntry zipEntry = new ZipEntry(fileName); zipOut.putNextEntry(zipEntry); FileInputStream fis = new FileInputStream(fileToZip); - byte[] bytes = new byte[1024]; - int length; - while ((length = fis.read(bytes)) >= 0) { - zipOut.write(bytes, 0, length); + FileChannel fc = fis.getChannel(); + int bufferSize = 1024; + if (bufferSize > fc.size()) { + bufferSize = (int) fc.size(); + } + ByteBuffer bb = ByteBuffer.allocate(bufferSize); + while (fc.read(bb) > 0) { + zipOut.write(bb.array(), 0, bb.position()); + bb.clear(); } fis.close(); }