From 5efe718f30b44f6e658052337b69f113d2e3e1ee Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Sun, 21 Aug 2011 20:20:00 +0000 Subject: [PATCH] fix: very slow operation of HDF5ContainerWriter due to inappropriate buffer size of IOUtils.copyLarge() SVN: 22570 --- .../cisd/common/hdf5/HDF5ContainerWriter.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerWriter.java b/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerWriter.java index 127cbea8c5c..863c38f3720 100644 --- a/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerWriter.java +++ b/common/source/java/ch/systemsx/cisd/common/hdf5/HDF5ContainerWriter.java @@ -20,8 +20,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import org.apache.commons.io.IOUtils; - import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; import ch.systemsx.cisd.hdf5.HDF5GenericStorageFeatures; import ch.systemsx.cisd.hdf5.IHDF5Writer; @@ -44,6 +42,8 @@ class HDF5ContainerWriter implements IHDF5ContainerWriter final static int BUFFER_SIZE = 10 * MB; + private final byte[] buffer = new byte[BUFFER_SIZE]; + private final IHDF5Writer writer; private final HDF5GenericStorageFeatures genericStorageFeatures; @@ -60,6 +60,18 @@ class HDF5ContainerWriter implements IHDF5ContainerWriter } } + private long copy(InputStream input, OutputStream output) throws IOException + { + long count = 0; + int n = 0; + while (-1 != (n = input.read(buffer))) + { + output.write(buffer, 0, n); + count += n; + } + return count; + } + public void writeToHDF5Container(String objectPath, InputStream istream, long size) throws IOExceptionUnchecked { @@ -79,7 +91,7 @@ class HDF5ContainerWriter implements IHDF5ContainerWriter IOException e = null; try { - IOUtils.copyLarge(istream, ostream); + copy(istream, ostream); } catch (IOException ex) { e = ex; -- GitLab