Skip to content
Snippets Groups Projects
Commit 778aa3d8 authored by brinn's avatar brinn
Browse files

fix: very slow operation of HDF5ContainerReader due to inappropriate buffer...

fix: very slow operation of HDF5ContainerReader due to inappropriate buffer size of IOUtils.copyLarge()

SVN: 22583
parent 83d1ee12
No related branches found
No related tags found
No related merge requests found
...@@ -22,8 +22,6 @@ import java.io.InputStream; ...@@ -22,8 +22,6 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.List; import java.util.List;
import org.apache.commons.io.IOUtils;
import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
import ch.systemsx.cisd.hdf5.HDF5FactoryProvider; import ch.systemsx.cisd.hdf5.HDF5FactoryProvider;
import ch.systemsx.cisd.hdf5.IHDF5Reader; import ch.systemsx.cisd.hdf5.IHDF5Reader;
...@@ -36,6 +34,8 @@ import ch.systemsx.cisd.hdf5.io.HDF5IOAdapterFactory; ...@@ -36,6 +34,8 @@ import ch.systemsx.cisd.hdf5.io.HDF5IOAdapterFactory;
*/ */
final class HDF5ContainerReader implements IHDF5ContainerReader final class HDF5ContainerReader implements IHDF5ContainerReader
{ {
private final byte[] buffer = new byte[HDF5ContainerWriter.BUFFER_SIZE];
private final IHDF5Reader innerReader; private final IHDF5Reader innerReader;
HDF5ContainerReader(final File hdf5Container) HDF5ContainerReader(final File hdf5Container)
...@@ -63,13 +63,25 @@ final class HDF5ContainerReader implements IHDF5ContainerReader ...@@ -63,13 +63,25 @@ final class HDF5ContainerReader implements IHDF5ContainerReader
return innerReader.getGroupMembers(groupPath); return innerReader.getGroupMembers(groupPath);
} }
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 readFromHDF5Container(String objectPath, OutputStream ostream) public void readFromHDF5Container(String objectPath, OutputStream ostream)
{ {
final InputStream istream = HDF5IOAdapterFactory.asInputStream(innerReader, objectPath); final InputStream istream = HDF5IOAdapterFactory.asInputStream(innerReader, objectPath);
Exception e = null; Exception e = null;
try try
{ {
IOUtils.copyLarge(istream, ostream); copy(istream, ostream);
} catch (IOException ex) } catch (IOException ex)
{ {
e = ex; e = ex;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment