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

📄 documentinputstream.java

📁 Office格式转换代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and *    "Apache POI" must not be used to endorse or promote products *    derived from this software without prior written permission. For *    written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    "Apache POI", nor may "Apache" appear in their name, without *    prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package org.apache.poi.poifs.filesystem;import java.io.*;/** * This class provides methods to read a DocumentEntry managed by a * Filesystem instance. * * @author Marc Johnson (mjohnson at apache dot org) */public class DocumentInputStream    extends InputStream{    // current offset into the Document    private int              _current_offset;    // current marked offset into the Document (used by mark and    // reset)    private int              _marked_offset;    // the Document's size    private int              _document_size;    // have we been closed?    private boolean          _closed;    // the actual Document    private POIFSDocument    _document;    // buffer used to read one byte at a time    private byte[]           _tiny_buffer;    // returned by read operations if we're at end of document    static private final int EOD = -1;    /**     * Create an InputStream from the specified DocumentEntry     *     * @param document the DocumentEntry to be read     *     * @exception IOException if the DocumentEntry cannot be opened     *            (like, maybe it has been deleted?)     */    public DocumentInputStream(final DocumentEntry document)        throws IOException    {        _current_offset = 0;        _marked_offset  = 0;        _document_size  = document.getSize();        _closed         = false;        _tiny_buffer    = null;        if (document instanceof DocumentNode)        {            _document = (( DocumentNode ) document).getDocument();        }        else        {            throw new IOException("Cannot open internal document storage");        }    }    /**     * Create an InputStream from the specified Document     *     * @param document the Document to be read     *     * @exception IOException if the DocumentEntry cannot be opened     *            (like, maybe it has been deleted?)     */    public DocumentInputStream(final POIFSDocument document)        throws IOException    {        _current_offset = 0;        _marked_offset  = 0;        _document_size  = document.getSize();        _closed         = false;        _tiny_buffer    = null;        _document       = document;    }    /**     * Returns the number of bytes that can be read (or skipped over)     * from this input stream without blocking by the next caller of a     * method for this input stream. The next caller might be the same     * thread or or another thread.     *     * @return the number of bytes that can be read from this input     *         stream without blocking.     *     * @exception IOException on error (such as the stream has been     *            closed)     */    public int available()        throws IOException    {        dieIfClosed();        return _document_size - _current_offset;    }    /**     * Closes this input stream and releases any system resources     * associated with the stream.     *     * @exception IOException     */    public void close()        throws IOException    {        _closed = true;    }    /**     * Marks the current position in this input stream. A subsequent     * call to the reset method repositions this stream at the last     * marked position so that subsequent reads re-read the same     * bytes.     * <p>     * The readlimit arguments tells this input stream to allow that     * many bytes to be read before the mark position gets     * invalidated. This implementation, however, does not care.     * <p>     * The general contract of mark is that, if the method     * markSupported returns true, the stream somehow remembers all     * the bytes read after the call to mark and stands ready to     * supply those same bytes again if and whenever the method reset     * is called. However, the stream is not required to remember any     * data at all if more than readlimit bytes are read from the     * stream before reset is called. But this stream will.     *     * @param ignoredReadlimit the maximum limit of bytes that can be     *                         read before the mark position becomes     *                         invalid. Ignored by this     *                         implementation.     */    public void mark(int ignoredReadlimit)    {        _marked_offset = _current_offset;    }    /**     * Tests if this input stream supports the mark and reset methods.     *     * @return true     */    public boolean markSupported()    {        return true;    }    /**     * Reads the next byte of data from the input stream. The value     * byte is returned as an int in the range 0 to 255. If no byte is     * available because the end of the stream has been reached, the     * value -1 is returned. The definition of this method in     * java.io.InputStream allows this method to block, but it won't.     *     * @return the next byte of data, or -1 if the end of the stream     *         is reached.     *     * @exception IOException     */    public int read()        throws IOException    {        dieIfClosed();        if (atEOD())        {            return EOD;        }        if (_tiny_buffer == null)        {            _tiny_buffer = new byte[ 1 ];        }        _document.read(_tiny_buffer, _current_offset++);        return ((int)_tiny_buffer[ 0 ]) & 0x000000FF;    }    /**     * Reads some number of bytes from the input stream and stores     * them into the buffer array b. The number of bytes actually read

⌨️ 快捷键说明

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