Module java.desktop
Package javax.imageio.stream

## Class FileCacheImageOutputStream

- java.lang.Object
- - javax.imageio.stream.ImageInputStreamImpl
  - - javax.imageio.stream.ImageOutputStreamImpl
    - - javax.imageio.stream.FileCacheImageOutputStream

- All Implemented Interfaces:
    `Closeable`, `DataInput`, `DataOutput`, `AutoCloseable`, `ImageInputStream`, `ImageOutputStream`

      public class FileCacheImageOutputStream
      extends ImageOutputStreamImpl

  An implementation of `ImageOutputStream` that writes its output to a regular `OutputStream`. A file is used to cache data until it is flushed to the output stream.

- - ### Field Summary

    - ### Fields declared in class javax.imageio.stream.ImageInputStreamImpl

      `bitOffset, byteOrder, flushedPos, streamPos`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `FileCacheImageOutputStream​(OutputStream stream, File cacheDir)` | Constructs a `FileCacheImageOutputStream` that will write to a given `outputStream`.

  - ### Method Summary

    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Closes this `FileCacheImageOutputStream`.
    `boolean` | `isCached()` | Returns `true` since this `ImageOutputStream` caches data in order to allow seeking backwards.
    `boolean` | `isCachedFile()` | Returns `true` since this `ImageOutputStream` maintains a file cache.
    `boolean` | `isCachedMemory()` | Returns `false` since this `ImageOutputStream` does not maintain a main memory cache.
    `void` | `seek​(long pos)` | Sets the current stream position and resets the bit offset to 0.

    - ### Methods declared in class javax.imageio.stream.ImageOutputStreamImpl

      `flushBits`

    - ### Methods declared in class javax.imageio.stream.ImageInputStreamImpl

      `checkClosed, finalize, length, mark, read, read, read, reset, skipBytes, skipBytes`

    - ### Methods declared in class java.lang.Object

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

    - ### Methods declared in interface javax.imageio.stream.ImageInputStream

      `flush, getBitOffset, getByteOrder, getFlushedPosition, getStreamPosition, length, mark, read, read, read, readBit, readBits, readBoolean, readByte, readBytes, readChar, readDouble, readFloat, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedInt, readUnsignedShort, readUTF, reset, setBitOffset, setByteOrder, skipBytes, skipBytes`

    - ### Methods declared in interface javax.imageio.stream.ImageOutputStream

      `flushBefore, write, write, write, writeBit, writeBits, writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeChars, writeDouble, writeDoubles, writeFloat, writeFloats, writeInt, writeInts, writeLong, writeLongs, writeShort, writeShorts, writeUTF`

- - ### Constructor Detail

    - #### FileCacheImageOutputStream

          public FileCacheImageOutputStream​(OutputStream stream,
                                            File cacheDir)
                                     throws IOException

      Constructs a `FileCacheImageOutputStream` that will write to a given `outputStream`.

      A temporary file is used as a cache. If `cacheDir` is non-`null` and is a directory, the file will be created there. If it is `null`, the system-dependent default temporary-file directory will be used (see the documentation for `File.createTempFile` for details).

      Parameters:
        `stream` - an `OutputStream` to write to.
        `cacheDir` - a `File` indicating where the cache file should be created, or `null` to use the system directory.
      Throws:
        `IllegalArgumentException` - if `stream` is `null`.
        `IllegalArgumentException` - if `cacheDir` is non-`null` but is not a directory.
        `IOException` - if a cache file cannot be created.

  - ### Method Detail

    - #### seek

          public void seek​(long pos)
                    throws IOException

      Sets the current stream position and resets the bit offset to 0. It is legal to seek past the end of the file; an `EOFException` will be thrown only if a read is performed. The file length will not be increased until a write is performed.
      Parameters:
        `pos` - a `long` containing the desired file pointer position.
      Throws:
        `IndexOutOfBoundsException` - if `pos` is smaller than the flushed position.
        `IOException` - if any other I/O error occurs.

    - #### isCached

          public boolean isCached()

      Returns `true` since this `ImageOutputStream` caches data in order to allow seeking backwards.
      Specified by:
        `isCached` in interface `ImageInputStream`
      Overrides:
        `isCached` in class `ImageInputStreamImpl`
      Returns:
        `true`.
      See Also:
        `isCachedMemory()`, `isCachedFile()`

    - #### isCachedFile

          public boolean isCachedFile()

      Returns `true` since this `ImageOutputStream` maintains a file cache.
      Specified by:
        `isCachedFile` in interface `ImageInputStream`
      Overrides:
        `isCachedFile` in class `ImageInputStreamImpl`
      Returns:
        `true`.
      See Also:
        `isCached()`, `isCachedMemory()`

    - #### isCachedMemory

          public boolean isCachedMemory()

      Returns `false` since this `ImageOutputStream` does not maintain a main memory cache.
      Specified by:
        `isCachedMemory` in interface `ImageInputStream`
      Overrides:
        `isCachedMemory` in class `ImageInputStreamImpl`
      Returns:
        `false`.
      See Also:
        `isCached()`, `isCachedFile()`

    - #### close

          public void close()
                     throws IOException

      Closes this `FileCacheImageOutputStream`. All pending data is flushed to the output, and the cache file is closed and removed. The destination `OutputStream` is not closed.
      Throws:
        `IOException` - if an error occurs.