package com.koushikdutta.async.stream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import com.koushikdutta.async.ByteBufferList;
import com.koushikdutta.async.DataEmitter;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.callback.DataCallback;
public class OutputStreamDataCallback implements DataCallback, CompletedCallback {
private OutputStream mOutput;
public OutputStreamDataCallback(OutputStream os) {
mOutput = os;
}
public OutputStream getOutputStream() {
return mOutput;
}
@Override
public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
try {
while (bb.size() > 0) {
ByteBuffer b = bb.remove();
mOutput.write(b.array(), b.arrayOffset() + b.position(), b.remaining());
ByteBufferList.reclaim(b);
}
}
catch (Exception ex) {
onCompleted(ex);
}
finally {
bb.recycle();
}
}
public void close() {
try {
mOutput.close();
}
catch (IOException e) {
onCompleted(e);
}
}
@Override
public void onCompleted(Exception error) {
error.printStackTrace();
}
}