+++ /dev/null
-package tim.prune.load;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Class to scoop bytes from an input stream into an array.
- * The size of the array doesn't have to be known in advance.
- * This is used for getting images and sound files out of zip
- * files or from remote URLs.
- */
-public class ByteScooper
-{
- /** Bucket size in bytes */
- private static final int BUCKET_SIZE = 5000;
- /** Amount by which barrel size is increased on demand */
- private static final int BARREL_SIZE_INCREMENT = 100000;
-
- /**
- * Scoop bytes from the given input stream and return the result
- * @param inIs input stream to scoop bytes from
- * @return byte array
- */
- public static byte[] scoop(InputStream inIs) throws IOException
- {
- byte[] _barrel = new byte[BARREL_SIZE_INCREMENT];
- byte[] _bucket = new byte[BUCKET_SIZE];
- int numBytesInBarrel = 0;
- // read from stream into the bucket
- int numBytesRead = inIs.read(_bucket);
- while (numBytesRead >= 0)
- {
- // expand barrel if necessary
- if ((numBytesInBarrel + numBytesRead) > _barrel.length)
- {
- byte[] newBarrel = new byte[_barrel.length + BARREL_SIZE_INCREMENT];
- System.arraycopy(_barrel, 0, newBarrel, 0, numBytesInBarrel);
- _barrel = newBarrel;
- }
- // copy from bucket into barrel
- System.arraycopy(_bucket, 0, _barrel, numBytesInBarrel, numBytesRead);
- numBytesInBarrel += numBytesRead;
- // read next lot from stream into the bucket
- numBytesRead = inIs.read(_bucket);
- }
- // Now we know how many bytes there are, so crop to size
- if (numBytesInBarrel == 0) return null;
- byte[] result = new byte[numBytesInBarrel];
- System.arraycopy(_barrel, 0, result, 0, numBytesInBarrel);
- return result;
- }
-}