bboss.org.jgroups.util.ExposedByteArrayInputStream Maven / Gradle / Ivy
The newest version!
package bboss.org.jgroups.util;
import java.io.ByteArrayInputStream;
import java.io.IOException;
/**
* @author Bela Ban
* @version $Id: ExposedByteArrayInputStream.java,v 1.2 2008/10/28 09:08:32 belaban Exp $
*/
public class ExposedByteArrayInputStream extends ByteArrayInputStream {
/**
* Creates a ByteArrayInputStream
* so that it uses buf
as its
* buffer array.
* The buffer array is not copied.
* The initial value of pos
* is 0
and the initial value
* of count
is the length of
* buf
.
* @param buf the input buffer.
*/
public ExposedByteArrayInputStream(byte[] buf) {
super(buf);
}
/**
* Creates ByteArrayInputStream
* that uses buf
as its
* buffer array. The initial value of pos
* is offset
and the initial value
* of count
is the minimum of offset+length
* and buf.length
.
* The buffer array is not copied. The buffer's mark is
* set to the specified offset.
* @param buf the input buffer.
* @param offset the offset in the buffer of the first byte to read.
* @param length the maximum number of bytes to read from the buffer.
*/
public ExposedByteArrayInputStream(byte[] buf, int offset, int length) {
super(buf, offset, length);
}
public void setData(byte[] buf, int offset, int length) {
this.buf=buf;
this.pos=offset;
this.count=Math.min(offset + length, buf.length);
this.mark=offset;
}
public int read() {
return (pos < count)? (buf[pos++] & 0xff) : -1;
}
public int read(byte b[], int off, int len) {
if(b == null) {
throw new NullPointerException();
}
else if(off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
}
if(pos >= count) {
return -1;
}
if(pos + len > count) {
len=count - pos;
}
if(len <= 0) {
return 0;
}
System.arraycopy(buf, pos, b, off, len);
pos+=len;
return len;
}
public long skip(long n) {
if(pos + n > count) {
n=count - pos;
}
if(n < 0) {
return 0;
}
pos+=n;
return n;
}
public int available() {
return count - pos;
}
public void reset() {
pos=mark;
}
public void close() throws IOException {
buf=null;
}
}