blob: c219ece6d1fea6b2807233cd114fb2a4087728cd [file] [log] [blame]
package com.baulsupp.process;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import EDU.oswego.cs.dl.util.concurrent.Executor;
import EDU.oswego.cs.dl.util.concurrent.FutureResult;
import EDU.oswego.cs.dl.util.concurrent.ThreadedExecutor;
public class IOUtil {
private static final int BUFFER_SIZE = 8192;
public static final Executor executor = new ThreadedExecutor();
public static int pump(InputStream is, OutputStream stream) throws IOException {
int pumped = 0;
byte[] buffy = new byte[BUFFER_SIZE];
int read = 0;
while ((read = is.read(buffy)) != -1) {
stream.write(buffy, 0, read);
pumped += read;
}
return read;
}
public static FutureResult pumpAsync(final InputStream is, final OutputStream os) {
final FutureResult result = new FutureResult();
try {
executor.execute(new Runnable() {
public void run() {
try {
int read = IOUtil.pump(is, os);
result.set(new Integer(read));
} catch (IOException e) {
// TODO remove debug once caller handle exception
System.out.println("ASYNC EXCEPTION (IOU.pumpAsync): " + e);
result.setException(e);
} finally {
try {
os.close();
is.close();
} catch (IOException e) {
// TODO remove debug once caller handle exception
System.out.println("ASYNC EXCEPTION (IOU.pumpAsync): " + e);
result.setException(e);
}
}
}
});
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return result;
}
}