/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package java.io; import com.jcraft.jzlib.ZInputStream; public class ByteArrayInputStream extends InputStream { protected byte[] buf; protected int pos; protected int mark; protected int count; public ByteArrayInputStream(byte[] buf) { this.buf = buf; this.count = buf.length; } public ByteArrayInputStream(byte[] buf, int offset, int length) { this.buf = buf; this.pos = offset > buf.length ? buf.length : offset; this.count = offset + length; if (this.count > buf.length) this.count = buf.length; this.mark = pos; } public ByteArrayInputStream(InputStream in) { // TODO Auto-generated constructor stub return; } public ByteArrayInputStream(ZInputStream in) { // TODO Auto-generated constructor stub return; } public int available() { return count - pos; } public void close() throws IOException { } public void mark(int readlimit) { mark = pos; } public boolean markSupported() { return true; } public int read() throws IOException { return pos < count ? buf[pos++] & 0xFF : -1; } public int read(byte[] b) throws IOException { return read(b, 0, b.length); } public int read(byte[] b, int off, int len) throws IOException { if (off < 0 || len < 0 || off >= b.length || off + len > b.length) { throw new IndexOutOfBoundsException(); } if (pos >= count) return -1; if (len == 0) return 0; if (pos + len >= count) len = count - pos; System.arraycopy(buf, pos, b, off, len); pos += len; return len; } public void reset() throws IOException { pos = mark; } public long skip(long n) throws IOException { if (pos + n < count) { pos += n; return n; } int result = count - pos; pos = count; return result; } }