package org.simpleframework.http.core;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.simpleframework.transport.ByteCursor;
import org.simpleframework.transport.Transport;
import org.simpleframework.transport.TransportCursor;
public class StreamCursor implements ByteCursor {
private TransportCursor cursor;
private Transport transport;
private byte[] swap;
public StreamCursor(String source) throws IOException {
this(source.getBytes("UTF-8"));
}
public StreamCursor(byte[] data) throws IOException {
this(new ByteArrayInputStream(data));
}
public StreamCursor(InputStream source) throws IOException {
this.transport = new StreamTransport(source, new OutputStream() {
public void write(int octet){}
});
this.cursor = new TransportCursor(transport);
this.swap = new byte[1];
}
// TODO investigate this
public boolean isOpen() throws IOException {
return true;
}
public boolean isReady() throws IOException {
return cursor.isReady();
}
public int ready() throws IOException {
return cursor.ready();
}
public int read() throws IOException {
if(read(swap) > 0) {
return swap[0] & 0xff;
}
return 0;
}
public int read(byte[] data) throws IOException {
return read(data, 0, data.length);
}
public int read(byte[] data, int off, int len) throws IOException {
return cursor.read(data, off, len);
}
public int reset(int len) throws IOException {
return cursor.reset(len);
}
public void push(byte[] data) throws IOException {
push(data, 0, data.length);
}
public void push(byte[] data, int off, int len) throws IOException {
cursor.push(data, off, len);
}
}