org.apache.poi.poifs.filesystem

## Class POIFSStream

- java.lang.Object
- - org.apache.poi.poifs.filesystem.POIFSStream

- All Implemented Interfaces:
    java.lang.Iterable<java.nio.ByteBuffer>

      public class POIFSStream
      extends java.lang.Object
      implements java.lang.Iterable<java.nio.ByteBuffer>

  This handles reading and writing a stream within a `POIFSFileSystem`. It can supply an iterator to read blocks, and way to write out to existing and new blocks. Most users will want a higher level version of this, which deals with properties to track which stream this is. This only works on big block streams, it doesn't handle small block ones. This uses the new NIO code TODO Implement a streaming write method, and append

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `POIFSStream.StreamBlockByteBuffer`
    `protected class` | `POIFSStream.StreamBlockByteBufferIterator` Class that handles a streaming read of one stream

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `POIFSStream(BlockStore blockStore)` Constructor for a new stream.
    `POIFSStream(BlockStore blockStore, int startBlock)` Constructor for an existing stream.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `free()` Frees all blocks in the stream
    `java.io.OutputStream` | `getOutputStream()`
    `int` | `getStartBlock()` What block does this stream start at? Will be `POIFSConstants.END_OF_CHAIN` for a new stream that hasn't been written to yet.
    `java.util.Iterator<java.nio.ByteBuffer>` | `iterator()` Returns an iterator that'll supply one `ByteBuffer` per block in the stream.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Constructor Detail

    - #### POIFSStream

          public POIFSStream(BlockStore blockStore,
                             int startBlock)

      Constructor for an existing stream. It's up to you to know how to get the start block (eg from a `HeaderBlock` or a `Property`)

    - #### POIFSStream

          public POIFSStream(BlockStore blockStore)

      Constructor for a new stream. A start block won't be allocated until you begin writing to it.

  - ### Method Detail

    - #### getStartBlock

          public int getStartBlock()

      What block does this stream start at? Will be `POIFSConstants.END_OF_CHAIN` for a new stream that hasn't been written to yet.

    - #### iterator

          public java.util.Iterator<java.nio.ByteBuffer> iterator()

      Returns an iterator that'll supply one `ByteBuffer` per block in the stream.
      Specified by:
        `iterator` in interface `java.lang.Iterable<java.nio.ByteBuffer>`

    - #### getOutputStream

          public java.io.OutputStream getOutputStream()
                                               throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### free

          public void free()
                    throws java.io.IOException

      Frees all blocks in the stream
      Throws:
        `java.io.IOException`

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.