javax.mail.util

## Class SharedFileInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - java.io.BufferedInputStream
      - - javax.mail.util.SharedFileInputStream

- All Implemented Interfaces:
    Closeable, AutoCloseable, SharedInputStream

      public class SharedFileInputStream
      extends BufferedInputStream
      implements SharedInputStream

  A `SharedFileInputStream` is a `BufferedInputStream` that buffers data from the file and supports the `mark` and `reset` methods. It also supports the `newStream` method that allows you to create other streams that represent subsets of the file. A `RandomAccessFile` object is used to access the file data.

  Note that when the SharedFileInputStream is closed, all streams created with the `newStream` method are also closed. This allows the creator of the SharedFileInputStream object to control access to the underlying file and ensure that it is closed when needed, to avoid leaking file descriptors. Note also that this behavior contradicts the requirements of SharedInputStream and may change in a future release.

  Since:
    JavaMail 1.4
  Author:
    Bill Shannon

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected long` | `bufpos` The file offset that corresponds to the first byte in the read buffer.
    `protected int` | `bufsize` The normal size of the read buffer.
    `protected long` | `datalen` The amount of data in this subset of the file.
    `protected RandomAccessFile` | `in` The file containing the data.
    `protected long` | `start` The file offset of the start of data in this subset of the file.

    - ### Fields inherited from class java.io.BufferedInputStream

      `buf, count, marklimit, markpos, pos`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SharedFileInputStream(File file)` Creates a `SharedFileInputStream` for the file.
    `SharedFileInputStream(File file, int size)` Creates a `SharedFileInputStream` with the specified buffer size.
    `SharedFileInputStream(String file)` Creates a `SharedFileInputStream` for the named file
    `SharedFileInputStream(String file, int size)` Creates a `SharedFileInputStream` with the specified buffer size.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `available()` Returns the number of bytes that can be read from this input stream without blocking.
    `void` | `close()` Closes this input stream and releases any system resources associated with the stream.
    `protected void` | `finalize()` Force this stream to close.
    `long` | `getPosition()` Return the current position in the InputStream, as an offset from the beginning of the InputStream.
    `void` | `mark(int readlimit)` See the general contract of the `mark` method of `InputStream`.
    `boolean` | `markSupported()` Tests if this input stream supports the `mark` and `reset` methods.
    `InputStream` | `newStream(long start, long end)` Return a new InputStream representing a subset of the data from this InputStream, starting at `start` (inclusive) up to `end` (exclusive).
    `int` | `read()` See the general contract of the `read` method of `InputStream`.
    `int` | `read(byte[] b, int off, int len)` Reads bytes from this stream into the specified byte array, starting at the given offset.
    `void` | `reset()` See the general contract of the `reset` method of `InputStream`.
    `long` | `skip(long n)` See the general contract of the `skip` method of `InputStream`.

    - ### Methods inherited from class java.io.FilterInputStream

      `read`

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

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

- - ### Field Detail

    - #### in

          protected RandomAccessFile in

      The file containing the data. Shared by all related SharedFileInputStreams.

    - #### bufsize

          protected int bufsize

      The normal size of the read buffer.

    - #### bufpos

          protected long bufpos

      The file offset that corresponds to the first byte in the read buffer.

    - #### start

          protected long start

      The file offset of the start of data in this subset of the file.

    - #### datalen

          protected long datalen

      The amount of data in this subset of the file.

  - ### Constructor Detail

    - #### SharedFileInputStream

          public SharedFileInputStream(File file)
                                throws IOException

      Creates a `SharedFileInputStream` for the file.
      Parameters:
        `file` - the file
      Throws:
        `IOException` - for errors opening the file

    - #### SharedFileInputStream

          public SharedFileInputStream(String file)
                                throws IOException

      Creates a `SharedFileInputStream` for the named file
      Parameters:
        `file` - the file
      Throws:
        `IOException` - for errors opening the file

    - #### SharedFileInputStream

          public SharedFileInputStream(File file,
                               int size)
                                throws IOException

      Creates a `SharedFileInputStream` with the specified buffer size.
      Parameters:
        `file` - the file
        `size` - the buffer size.
      Throws:
        `IOException` - for errors opening the file
        `IllegalArgumentException` - if size ≤ 0.

    - #### SharedFileInputStream

          public SharedFileInputStream(String file,
                               int size)
                                throws IOException

      Creates a `SharedFileInputStream` with the specified buffer size.
      Parameters:
        `file` - the file
        `size` - the buffer size.
      Throws:
        `IOException` - for errors opening the file
        `IllegalArgumentException` - if size ≤ 0.

  - ### Method Detail

    - #### read

          public int read()
                   throws IOException

      See the general contract of the `read` method of `InputStream`.
      Overrides:
        `read` in class `BufferedInputStream`
      Returns:
        the next byte of data, or `-1` if the end of the stream is reached.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### read

          public int read(byte[] b,
                 int off,
                 int len)
                   throws IOException

      Reads bytes from this stream into the specified byte array, starting at the given offset.

      This method implements the general contract of the corresponding ``read`` method of the ``InputStream`` class.

      Overrides:
        `read` in class `BufferedInputStream`
      Parameters:
        `b` - destination buffer.
        `off` - offset at which to start storing bytes.
        `len` - maximum number of bytes to read.
      Returns:
        the number of bytes read, or `-1` if the end of the stream has been reached.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### skip

          public long skip(long n)
                    throws IOException

      See the general contract of the `skip` method of `InputStream`.
      Overrides:
        `skip` in class `BufferedInputStream`
      Parameters:
        `n` - the number of bytes to be skipped.
      Returns:
        the actual number of bytes skipped.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### available

          public int available()
                        throws IOException

      Returns the number of bytes that can be read from this input stream without blocking.
      Overrides:
        `available` in class `BufferedInputStream`
      Returns:
        the number of bytes that can be read from this input stream without blocking.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### mark

          public void mark(int readlimit)

      See the general contract of the `mark` method of `InputStream`.
      Overrides:
        `mark` in class `BufferedInputStream`
      Parameters:
        `readlimit` - the maximum limit of bytes that can be read before the mark position becomes invalid.
      See Also:
        `reset()`

    - #### reset

          public void reset()
                     throws IOException

      See the general contract of the `reset` method of `InputStream`.

      If `markpos` is `-1` (no mark has been set or the mark has been invalidated), an `IOException` is thrown. Otherwise, `pos` is set equal to `markpos`.

      Overrides:
        `reset` in class `BufferedInputStream`
      Throws:
        `IOException` - if this stream has not been marked or if the mark has been invalidated.
      See Also:
        `mark(int)`

    - #### markSupported

          public boolean markSupported()

      Tests if this input stream supports the `mark` and `reset` methods. The `markSupported` method of `SharedFileInputStream` returns `true`.
      Overrides:
        `markSupported` in class `BufferedInputStream`
      Returns:
        a `boolean` indicating if this stream type supports the `mark` and `reset` methods.
      See Also:
        `InputStream.mark(int)`, `InputStream.reset()`

    - #### close

          public void close()
                     throws IOException

      Closes this input stream and releases any system resources associated with the stream.
      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Overrides:
        `close` in class `BufferedInputStream`
      Throws:
        `IOException` - if an I/O error occurs.

    - #### getPosition

          public long getPosition()

      Return the current position in the InputStream, as an offset from the beginning of the InputStream.
      Specified by:
        `getPosition` in interface `SharedInputStream`
      Returns:
        the current position

    - #### newStream

          public InputStream newStream(long start,
                              long end)

      Return a new InputStream representing a subset of the data from this InputStream, starting at `start` (inclusive) up to `end` (exclusive). `start` must be non-negative. If `end` is -1, the new stream ends at the same place as this stream. The returned InputStream will also implement the SharedInputStream interface.
      Specified by:
        `newStream` in interface `SharedInputStream`
      Parameters:
        `start` - the starting position
        `end` - the ending position + 1
      Returns:
        the new stream

    - #### finalize

          protected void finalize()
                           throws Throwable

      Force this stream to close.
      Overrides:
        `finalize` in class `Object`
      Throws:
        `Throwable`

Copyright © 1996-2013, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.