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