package org.jgroups.util;
import java.io.ByteArrayInputStream;
import java.io.IOException;
/**
* @author Bela Ban
*/
public class ExposedByteArrayInputStream extends ByteArrayInputStream {
/**
* Creates a <code>ByteArrayInputStream</code>
* so that it uses <code>buf</code> as its
* buffer array.
* The buffer array is not copied.
* The initial value of <code>pos</code>
* is <code>0</code> and the initial value
* of <code>count</code> is the length of
* <code>buf</code>.
* @param buf the input buffer.
*/
public ExposedByteArrayInputStream(byte[] buf) {
super(buf);
}
/**
* Creates <code>ByteArrayInputStream</code>
* that uses <code>buf</code> as its
* buffer array. The initial value of <code>pos</code>
* is <code>offset</code> and the initial value
* of <code>count</code> is the minimum of <code>offset+length</code>
* and <code>buf.length</code>.
* 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;
}
}