⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 documentinputstream.java

📁 Office格式转换代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * is returned as an integer. The definition of this method in     * java.io.InputStream allows this method to block, but it won't.     * <p>     * If b is null, a NullPointerException is thrown. If the length     * of b is zero, then no bytes are read and 0 is returned;     * otherwise, there is an attempt to read at least one byte. If no     * byte is available because the stream is at end of file, the     * value -1 is returned; otherwise, at least one byte is read and     * stored into b.     * <p>     * The first byte read is stored into element b[0], the next one     * into b[1], and so on. The number of bytes read is, at most,     * equal to the length of b. Let k be the number of bytes actually     * read; these bytes will be stored in elements b[0] through     * b[k-1], leaving elements b[k] through b[b.length-1] unaffected.     * <p>     * If the first byte cannot be read for any reason other than end     * of file, then an IOException is thrown. In particular, an     * IOException is thrown if the input stream has been closed.     * <p>     * The read(b) method for class InputStream has the same effect as:     * <p>     * <code>read(b, 0, b.length)</code>     *     * @param b the buffer into which the data is read.     *     * @return the total number of bytes read into the buffer, or -1     *         if there is no more data because the end of the stream     *         has been reached.     *     * @exception IOException     * @exception NullPointerException     */    public int read(final byte [] b)        throws IOException, NullPointerException    {        return read(b, 0, b.length);    }    /**     * Reads up to len bytes of data from the input stream into an     * array of bytes. An attempt is made to read as many as len     * bytes, but a smaller number may be read, possibly zero. The     * number of bytes actually read is returned as an integer.     * <p>     * The definition of this method in java.io.InputStream allows it     * to block, but it won't.     * <p>     * If b is null, a NullPointerException is thrown.     * <p>     * If off is negative, or len is negative, or off+len is greater     * than the length of the array b, then an     * IndexOutOfBoundsException is thrown.     * <p>     * If len is zero, then no bytes are read and 0 is returned;     * otherwise, there is an attempt to read at least one byte. If no     * byte is available because the stream is at end of file, the     * value -1 is returned; otherwise, at least one byte is read and     * stored into b.     * <p>     * The first byte read is stored into element b[off], the next one     * into b[off+1], and so on. The number of bytes read is, at most,     * equal to len. Let k be the number of bytes actually read; these     * bytes will be stored in elements b[off] through b[off+k-1],     * leaving elements b[off+k] through b[off+len-1] unaffected.     * <p>     * In every case, elements b[0] through b[off] and elements     * b[off+len] through b[b.length-1] are unaffected.     * <p>     * If the first byte cannot be read for any reason other than end     * of file, then an IOException is thrown. In particular, an     * IOException is thrown if the input stream has been closed.     *     * @param b the buffer into which the data is read.     * @param off the start offset in array b at which the data is     *            written.     * @param len the maximum number of bytes to read.     *     * @return the total number of bytes read into the buffer, or -1     *         if there is no more data because the end of the stream     *         has been reached.     *     * @exception IOException     * @exception NullPointerException     * @exception IndexOutOfBoundsException     */    public int read(final byte [] b, final int off, final int len)        throws IOException, NullPointerException, IndexOutOfBoundsException    {        dieIfClosed();        if (b == null)        {            throw new NullPointerException("buffer is null");        }        if ((off < 0) || (len < 0) || (b.length < (off + len)))        {            throw new IndexOutOfBoundsException(                "can't read past buffer boundaries");        }        if (len == 0)        {            return 0;        }        if (atEOD())        {            return EOD;        }        int limit = Math.min(available(), len);        if ((off == 0) && (limit == b.length))        {            _document.read(b, _current_offset);        }        else        {            byte[] buffer = new byte[ limit ];            _document.read(buffer, _current_offset);            System.arraycopy(buffer, 0, b, off, limit);        }        _current_offset += limit;        return limit;    }    /**     * Repositions this stream to the position at the time the mark     * method was last called on this input stream.     * <p>     * The general contract of reset is:     * <p>     * <ul>     *    <li>     *        If the method markSupported returns true, then:     *        <ul>     *            <li>     *                If the method mark has not been called since the     *                stream was created, or the number of bytes read     *                from the stream since mark was last called is     *                larger than the argument to mark at that last     *                call, then an IOException might be thrown.     *            </li>     *            <li>     *                If such an IOException is not thrown, then the     *                stream is reset to a state such that all the     *                bytes read since the most recent call to mark     *                (or since the start of the file, if mark has not     *                been called) will be resupplied to subsequent     *                callers of the read method, followed by any     *                bytes that otherwise would have been the next     *                input data as of the time of the call to reset.     *             </li>     *         </ul>     *     </li>     *     <li>     *         If the method markSupported returns false, then:     *         <ul>     *             <li>     *                 The call to reset may throw an IOException.     *             </li>     *             <li>     *                 If an IOException is not thrown, then the     *                 stream is reset to a fixed state that depends     *                 on the particular type of the input and how it     *                 was created. The bytes that will be supplied to     *                 subsequent callers of the read method depend on     *                 the particular type of the input stream.     *             </li>     *         </ul>     *     </li>     * </ul>     * <p>     * All well and good ... this class's markSupported method returns     * true and this method does not care whether you've called mark     * at all, or whether you've exceeded the number of bytes     * specified in the last call to mark. We're basically walking a     * byte array ... mark and reset to your heart's content.     */    public void reset()    {        _current_offset = _marked_offset;    }    /**     * Skips over and discards n bytes of data from this input     * stream. The skip method may, for a variety of reasons, end up     * skipping over some smaller number of bytes, possibly 0. This     * may result from any of a number of conditions; reaching end of     * file before n bytes have been skipped is only one     * possibility. The actual number of bytes skipped is returned. If     * n is negative, no bytes are skipped.     *     * @param n the number of bytes to be skipped.     *     * @return the actual number of bytes skipped.     *     * @exception IOException     */    public long skip(final long n)        throws IOException    {        dieIfClosed();        if (n < 0)        {            return 0;        }        int new_offset = _current_offset + ( int ) n;        if (new_offset < _current_offset)        {            // wrap around in converting a VERY large long to an int            new_offset = _document_size;        }        else if (new_offset > _document_size)        {            new_offset = _document_size;        }        long rval = new_offset - _current_offset;        _current_offset = new_offset;        return rval;    }    private void dieIfClosed()        throws IOException    {        if (_closed)        {            throw new IOException(                "cannot perform requested operation on a closed stream");        }    }    private boolean atEOD()    {        return _current_offset == _document_size;    }}   // end public class DocumentInputStream

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -