## org.apache.poi.poifs.filesystem
Class NPOIFSStream

    java.lang.Object
      org.apache.poi.poifs.filesystem.NPOIFSStream

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

    public class NPOIFSStream

extends java.lang.Object
implements java.lang.Iterable<java.nio.ByteBuffer>

This handles reading and writing a stream within a `NPOIFSFileSystem`. 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
`protected class` `NPOIFSStream.StreamBlockByteBufferIterator` Class that handles a streaming read of one stream

Constructor Summary
`NPOIFSStream(BlockStore blockStore)` Constructor for a new stream.
`NPOIFSStream(BlockStore blockStore, int startBlock)` Constructor for an existing stream.

Method Summary
`void` `free()` Frees all blocks in the stream
`java.util.Iterator<java.nio.ByteBuffer>` `getBlockIterator()`
`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.
`void` `updateContents(byte[] contents)` Updates the contents of the stream to the new set of bytes.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### NPOIFSStream

    public NPOIFSStream(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`)

### NPOIFSStream

    public NPOIFSStream(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>`

### getBlockIterator

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

### updateContents

    public void updateContents(byte[] contents)
                        throws java.io.IOException

  Updates the contents of the stream to the new set of bytes. Note - if this is property based, you'll still need to update the size in the property yourself

  Throws:
    `java.io.IOException`

### free

    public void free()
              throws java.io.IOException

  Frees all blocks in the stream

  Throws:
    `java.io.IOException`

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