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

📄 inputstreamsource.java

📁 html 解析处理代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }            else            {                if (mBuffer != buffer)                {   // copy the bytes previously read                    System.arraycopy (mBuffer, 0, buffer, 0, mLevel);                    mBuffer = buffer;                }                mLevel += read;            }            // todo, should repeat on read shorter than original min        }    }    //    // Reader overrides    //    /**     * Does nothing.     * It's supposed to close the source, but use destroy() instead.     * @exception IOException <em>not used</em>     * @see #destroy     */    public void close () throws IOException    {    }    /**     * Read a single character.     * This method will block until a character is available,     * an I/O error occurs, or the end of the stream is reached.     * @return The character read, as an integer in the range 0 to 65535     * (<tt>0x00-0xffff</tt>), or {@link #EOF EOF} if the end of the stream has     * been reached     * @exception IOException If an I/O error occurs.     */    public int read () throws IOException    {        int ret;        if (mLevel - mOffset < 1)        {            if (null == mStream)                throw new IOException ("source is closed");            fill (1);            if (mOffset >= mLevel)                ret = EOF;            else                ret = mBuffer[mOffset++];        }        else            ret = mBuffer[mOffset++];        return (ret);    }    /**     * Read characters into a portion of an array.  This method will block     * until some input is available, an I/O error occurs, or the end of the     * stream is reached.     * @param cbuf Destination buffer     * @param off Offset at which to start storing characters     * @param len Maximum number of characters to read     * @return The number of characters read, or {@link #EOF EOF} if the end of     * the stream has been reached     * @exception IOException If an I/O error occurs.     */    public int read (char[] cbuf, int off, int len) throws IOException    {        int ret;        if (null == mStream)            throw new IOException ("source is closed");        if ((null == cbuf) || (0 > off) || (0 > len))            throw new IOException ("illegal argument read ("                + ((null == cbuf) ? "null" : "cbuf")                + ", " + off + ", " + len + ")");        if (mLevel - mOffset < len)            fill (len - (mLevel - mOffset)); // minimum to satisfy this request        if (mOffset >= mLevel)            ret = EOF;        else        {            ret = Math.min (mLevel - mOffset, len);            System.arraycopy (mBuffer, mOffset, cbuf, off, ret);            mOffset += ret;        }        return (ret);    }    /**     * Read characters into an array.     * This method will block until some input is available, an I/O error occurs,     * or the end of the stream is reached.     * @param cbuf Destination buffer.     * @return The number of characters read, or {@link #EOF EOF} if the end of     * the stream has been reached.     * @exception IOException If an I/O error occurs.     */    public int read (char[] cbuf) throws IOException    {        return (read (cbuf, 0, cbuf.length));    }    /**     * Reset the source.     * Repositions the read point to begin at zero.     * @exception IllegalStateException If the source has been closed.     */    public void reset ()        throws            IllegalStateException    {        if (null == mStream)            throw new IllegalStateException ("source is closed");        if (-1 != mMark)            mOffset = mMark;        else            mOffset = 0;    }    /**     * Tell whether this source supports the mark() operation.     * @return <code>true</code>.     */    public boolean markSupported ()    {        return (true);    }    /**     * Mark the present position in the source.     * Subsequent calls to {@link #reset()}     * will attempt to reposition the source to this point.     * @param  readAheadLimit <em>Not used.</em>     * @exception IOException If the source is closed.     *     */    public void mark (int readAheadLimit) throws IOException    {        if (null == mStream)            throw new IOException ("source is closed");        mMark = mOffset;    }    /**     * Tell whether this source is ready to be read.     * @return <code>true</code> if the next read() is guaranteed not to block     * for input, <code>false</code> otherwise.     * Note that returning false does not guarantee that the next read will block.     * @exception IOException If the source is closed.     */    public boolean ready () throws IOException    {        if (null == mStream)            throw new IOException ("source is closed");        return (mOffset < mLevel);    }    /**     * Skip characters.     * This method will block until some characters are available,     * an I/O error occurs, or the end of the stream is reached.     * <em>Note: n is treated as an int</em>     * @param n The number of characters to skip.     * @return The number of characters actually skipped     * @exception IllegalArgumentException If <code>n</code> is negative.     * @exception IOException If an I/O error occurs.     */    public long skip (long n)        throws            IOException,            IllegalArgumentException    {        long ret;        if (null == mStream)            throw new IOException ("source is closed");        if (0 > n)            throw new IllegalArgumentException ("cannot skip backwards");        else        {            if (mLevel - mOffset < n)                fill ((int)(n - (mLevel - mOffset))); // minimum to satisfy this request            if (mOffset >= mLevel)                ret = EOF;            else            {                ret = Math.min (mLevel - mOffset, n);                mOffset += ret;            }        }        return (ret);    }    //    // Methods not in your Daddy's Reader    //    /**     * Undo the read of a single character.     * @exception IOException If the source is closed or no characters have     * been read.     */    public void unread () throws IOException    {        if (null == mStream)            throw new IOException ("source is closed");        if (0 < mOffset)            mOffset--;        else            throw new IOException ("can't unread no characters");    }    /**     * Retrieve a character again.     * @param offset The offset of the character.     * @return The character at <code>offset</code>.     * @exception IOException If the offset is beyond {@link #offset()} or the     * source is closed.     */    public char getCharacter (int offset) throws IOException    {        char ret;        if (null == mStream)            throw new IOException ("source is closed");        if (offset >= mBuffer.length)            throw new IOException ("illegal read ahead");        else            ret = mBuffer[offset];                return (ret);    }    /**     * Retrieve characters again.     * @param array The array of characters.     * @param offset The starting position in the array where characters are to be placed.     * @param start The starting position, zero based.     * @param end The ending position     * (exclusive, i.e. the character at the ending position is not included),     * zero based.     * @exception IOException If the start or end is beyond {@link #offset()}     * or the source is closed.     */    public void getCharacters (char[] array, int offset, int start, int end) throws IOException    {        if (null == mStream)            throw new IOException ("source is closed");        System.arraycopy (mBuffer, start, array, offset, end - start);    }        /**     * Retrieve a string.     * @param offset The offset of the first character.     * @param length The number of characters to retrieve.     * @return A string containing the <code>length</code> characters at <code>offset</code>.     * @exception IOException If the offset or (offset + length) is beyond     * {@link #offset()} or the source is closed.     */    public String getString (int offset, int length) throws IOException    {        String ret;        if (null == mStream)            throw new IOException ("source is closed");        if (offset + length > mBuffer.length)            throw new IOException ("illegal read ahead");        else            ret = new String (mBuffer, offset, length);                return (ret);    }    /**     * Append characters already read into a <code>StringBuffer</code>.     * @param buffer The buffer to append to.     * @param offset The offset of the first character.     * @param length The number of characters to retrieve.     * @exception IOException If the offset or (offset + length) is beyond     * {@link #offset()} or the source is closed.     */    public void getCharacters (StringBuffer buffer, int offset, int length) throws IOException    {        if (null == mStream)            throw new IOException ("source is closed");        buffer.append (mBuffer, offset, length);    }    /**     * Close the source.     * Once a source has been closed, further {@link #read() read},     * {@link #ready ready}, {@link #mark mark}, {@link #reset reset},     * {@link #skip skip}, {@link #unread unread},     * {@link #getCharacter getCharacter} or {@link #getString getString}     * invocations will throw an IOException.     * Closing a previously-closed source, however, has no effect.     * @exception IOException If an I/O error occurs     */    public void destroy () throws IOException    {        mStream = null;        if (null != mReader)            mReader.close ();        mReader = null;        mBuffer = null;        mLevel = 0;        mOffset = 0;        mMark = -1;    }    /**     * Get the position (in characters).     * @return The number of characters that have already been read, or     * {@link #EOF EOF} if the source is closed.     */    public int offset ()    {        int ret;        if (null == mStream)            ret = EOF;        else            ret = mOffset;        return (ret);    }    /**     * Get the number of available characters.     * @return The number of characters that can be read without blocking or     * zero if the source is closed.     */    public int available ()    {        int ret;        if (null == mStream)            ret = 0;        else            ret = mLevel - mOffset;        return (ret);    }}

⌨️ 快捷键说明

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