Module jakarta.mail

Class SharedFileInputStream

All Implemented Interfaces:
SharedInputStream, Closeable, AutoCloseable

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.

Since:
JavaMail 1.4
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    (package private) static class 
    A shared class that keeps track of the references to a particular file so it can be closed when the last reference is gone.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected long
    The file offset that corresponds to the first byte in the read buffer.
    protected int
    The normal size of the read buffer.
    protected long
    The amount of data in this subset of the file.
    private static int
     
    The file containing the data.
     
    protected long
    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
    Modifier
    Constructor
    Description
    private
    SharedFileInputStream(SharedFileInputStream.SharedFile sf, long start, long len, int bufsize)
    Used internally by the newStream method.
     
    Creates a SharedFileInputStream for the file.
     
    SharedFileInputStream(File file, int size)
    Creates a SharedFileInputStream with the specified buffer size.
     
    Creates a SharedFileInputStream for the named file
     
    SharedFileInputStream(String file, int size)
    Creates a SharedFileInputStream with the specified buffer size.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    Returns the number of bytes that can be read from this input stream without blocking.
    void
    Closes this input stream and releases any system resources associated with the stream.
    private void
    Check to make sure that this stream has not been closed
    private void
    Fills the buffer with more data, taking into account shuffling and other tricks for dealing with marks.
    protected void
    Force this stream to close.
    long
    Return the current position in the InputStream, as an offset from the beginning of the InputStream.
    private int
     
    private void
     
    void
    mark(int readlimit)
    See the general contract of the mark method of InputStream.
    boolean
    Tests if this input stream supports the mark and reset methods.
    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
    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.
    private int
    read1(byte[] b, int off, int len)
    Read characters into a portion of an array, reading from the underlying stream at most once if necessary.
    void
    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 Details

    • defaultBufferSize

      private static int defaultBufferSize
    • 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.
    • sf

  • Constructor Details

    • 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.
    • SharedFileInputStream

      private SharedFileInputStream(SharedFileInputStream.SharedFile sf, long start, long len, int bufsize)
      Used internally by the newStream method.
  • Method Details

    • ensureOpen

      private void ensureOpen() throws IOException
      Check to make sure that this stream has not been closed
      Throws:
      IOException
    • init

      private void init(SharedFileInputStream.SharedFile sf, int size) throws IOException
      Throws:
      IOException
    • fill

      private void fill() throws IOException
      Fills the buffer with more data, taking into account shuffling and other tricks for dealing with marks. Assumes that it is being called by a synchronized method. This method also assumes that all data has already been read in, hence pos > count.
      Throws:
      IOException
    • 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.
    • read1

      private int read1(byte[] b, int off, int len) throws IOException
      Read characters into a portion of an array, reading from the underlying stream at most once if necessary.
      Throws:
      IOException
    • 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.
    • in_available

      private int in_available() throws IOException
      Throws:
      IOException
    • 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

      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:
    • 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:
    • close

      public void close() throws IOException
      Closes this input stream and releases any system resources associated with the stream.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      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