📄 chunkinputstream.java
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-2000 by SMB GmbH. All rights reserved.//// $Id: ChunkInputStream.java,v 1.6 2000/11/03 18:59:13 conny Exp $package org.ozoneDB.xml.util;import java.io.InputStream;import java.io.IOException;import java.io.Serializable;/** */public final class ChunkInputStream extends InputStream implements Serializable { /** * The internal buffer array where the data is stored. When necessary, * it may be replaced by another array of * a different size. */ protected byte[] buf; /** * The current position in the buffer. This is the index of the next * character to be read from the <code>buf</code> array. * <p> * This value is always in the range <code>0</code> * through <code>count</code>. If it is less * than <code>count</code>, then <code>buf[pos]</code> * is the next byte to be supplied as input; * if it is equal to <code>count</code>, then * the next <code>read</code> or <code>skip</code> * operation will require more bytes to be * read from the contained input stream. * * @see java.io.BufferedInputStream#buf */ protected int pos; /** * Creates a <code>BufferedInputStream</code> * and saves its argument, the input stream * <code>in</code>, for later use. An internal * buffer array is created and stored in <code>buf</code>. * * @param in the underlying input stream. */ public ChunkInputStream( byte[] data ) { this.buf = data; this.pos = 0; } /** * See * the general contract of the <code>read</code> * method of <code>InputStream</code>. * * @return the next byte of data, or <code>-1</code> if the end of the * stream is reached. * @exception IOException if an I/O error occurs. * @see java.io.FilterInputStream#in */ public synchronized int read() throws IOException { if (this.pos >= this.buf.length) { return -1; } return this.buf[this.pos++] & 0xff; } /** * Reads bytes from this byte-input stream into the specified byte array, * starting at the given offset. * * @param b destination buffer. * @param off offset at which to start storing bytes. * @param len maximum number of bytes to read. * @return the number of bytes read, or <code>-1</code> if the end of * the stream has been reached. * @exception IOException if an I/O error occurs. */ public synchronized final int read( byte[] b, int off, int len ) throws IOException { if (this.pos >= this.buf.length) { return -1; } if (off < 0 || off > b.length || len < 0 || off + len > b.length || off + len < 0) { throw new IndexOutOfBoundsException(); } else { if (len == 0) { return 0; } } int toRead = this.buf.length - this.pos; len = toRead <= len ? toRead : len; System.arraycopy( this.buf, this.pos, b, off, len ); this.pos += len; return len; } /** * See the general contract of the <code>skip</code> * method of <code>InputStream</code>. * * @param n the number of bytes to be skipped. * @return the actual number of bytes skipped. * @exception IOException if an I/O error occurs. */ public synchronized final long skip( long n ) throws IOException { int toRead = this.buf.length - this.pos; n = toRead <= n ? toRead : n; pos += n; return n; } /** * Returns the number of bytes that can be read from this input * stream without blocking. * * @return the number of bytes that can be read from this input * stream without blocking. * @exception IOException if an I/O error occurs. */ public synchronized final int available() throws IOException { return this.buf.length - pos; } /** * Tests if this input stream supports the <code>mark</code> * and <code>reset</code> methods. The <code>markSupported</code> * method of <code>ChunkInputStream</code> returns <code>false</code>. * * @return a <code>boolean</code> indicating if this stream type supports * the <code>mark</code> and <code>reset</code> methods. */ public final boolean markSupported() { return false; } /** * Closes this input stream and releases any system resources * associated with the stream. * * @exception IOException if an I/O error occurs. */ public synchronized final void close() throws IOException { this.buf = null; } /** * Set a new buffer for this input stream. * @param buffer the data buffer */ public final void setBuffer( byte[] buffer ) { this.buf = buffer; this.pos = 0; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -