All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.util.FastInputStream Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.util;

import java.io.InputStream;

/**
 * A replacement for ByteArrayInputStream that does not synchronize every
 * byte read.
 *
 * 

This class extends {@link InputStream} and its read() * methods allow it to be used as a standard input stream. In addition, it * provides readFast() methods that are not declared to throw * IOException. IOException is never thrown by this * class.

* * @author Mark Hayes */ public class FastInputStream extends InputStream { protected int len; protected int off; protected int mark; protected byte[] buf; /** * Creates an input stream. * * @param buffer the data to read. */ public FastInputStream(byte[] buffer) { buf = buffer; len = buffer.length; } /** * Creates an input stream. * * @param buffer the data to read. * * @param offset the byte offset at which to begin reading. * * @param length the number of bytes to read. */ public FastInputStream(byte[] buffer, int offset, int length) { buf = buffer; off = offset; len = offset + length; } // --- begin ByteArrayInputStream compatible methods --- @Override public int available() { return len - off; } @Override public boolean markSupported() { return true; } @Override public void mark(int readLimit) { mark = off; } @Override public void reset() { off = mark; } @Override public long skip(long count) { int myCount = (int) count; if (myCount + off > len) { myCount = len - off; } skipFast(myCount); return myCount; } @Override public int read() { return readFast(); } @Override public int read(byte[] toBuf) { return readFast(toBuf, 0, toBuf.length); } @Override public int read(byte[] toBuf, int offset, int length) { return readFast(toBuf, offset, length); } // --- end ByteArrayInputStream compatible methods --- /** * Equivalent to skip() but takes an int parameter instead of a * long, and does not check whether the count given is larger than the * number of remaining bytes. * * @param count the number of bytes to skip. * * @see #skip(long) */ public final void skipFast(int count) { off += count; } /** * Equivalent to read() but does not throw * IOException. * * @return the next byte of data, or -1 if at the end of the stream. * * @see #read() */ public final int readFast() { return (off < len) ? (buf[off++] & 0xff) : (-1); } /** * Equivalent to read(byte[]) but does not throw * IOException. * @param toBuf the buffer into which the data is read. * * @return the number of bytes read, or -1 if at the end of the stream. * * @see #read(byte[]) */ public final int readFast(byte[] toBuf) { return readFast(toBuf, 0, toBuf.length); } /** * Equivalent to read(byte[],int,int) but does not throw * IOException. * * @param toBuf the buffer into which the data is read. * * @param offset the start offset in array at which the data is written. * * @param length the maximum number of bytes to read. * * @return the number of bytes read, or -1 if at the end of the stream. * * @see #read(byte[],int,int) */ public final int readFast(byte[] toBuf, int offset, int length) { int avail = len - off; if (avail <= 0) { return -1; } if (length > avail) { length = avail; } System.arraycopy(buf, off, toBuf, offset, length); off += length; return length; } /** * Returns the underlying data being read. * * @return the underlying data. */ public final byte[] getBufferBytes() { return buf; } /** * Returns the offset at which data is being read from the buffer. * * @return the offset at which data is being read. */ public final int getBufferOffset() { return off; } /** * Returns the end of the buffer being read. * * @return the end of the buffer. */ public final int getBufferLength() { return len; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy