Package javax.mail.util
Class SharedFileInputStream
- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.BufferedInputStream
-
- javax.mail.util.SharedFileInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,SharedInputStream
- Direct Known Subclasses:
WritableSharedFile
public class SharedFileInputStream extends java.io.BufferedInputStream implements SharedInputStream
ASharedFileInputStreamis aBufferedInputStreamthat buffers data from the file and supports themarkandresetmethods. It also supports thenewStreammethod that allows you to create other streams that represent subsets of the file. ARandomAccessFileobject is used to access the file data.Note that when the SharedFileInputStream is closed, all streams created with the
newStreammethod 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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classSharedFileInputStream.SharedFileA 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 longbufposThe file offset that corresponds to the first byte in the read buffer.protected intbufsizeThe normal size of the read buffer.protected longdatalenThe amount of data in this subset of the file.private static intdefaultBufferSizeprotected java.io.RandomAccessFileinThe file containing the data.private booleanmasterTrue if this is a top level stream created directly by "new".private SharedFileInputStream.SharedFilesfprotected longstartThe file offset of the start of data in this subset of the file.
-
Constructor Summary
Constructors Modifier Constructor Description SharedFileInputStream(java.io.File file)Creates aSharedFileInputStreamfor the file.SharedFileInputStream(java.io.File file, int size)Creates aSharedFileInputStreamwith the specified buffer size.SharedFileInputStream(java.lang.String file)Creates aSharedFileInputStreamfor the named fileSharedFileInputStream(java.lang.String file, int size)Creates aSharedFileInputStreamwith the specified buffer size.privateSharedFileInputStream(SharedFileInputStream.SharedFile sf, long start, long len, int bufsize)Used internally by thenewStreammethod.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()Returns the number of bytes that can be read from this input stream without blocking.voidclose()Closes this input stream and releases any system resources associated with the stream.private voidensureOpen()Check to make sure that this stream has not been closedprivate voidfill()Fills the buffer with more data, taking into account shuffling and other tricks for dealing with marks.protected voidfinalize()Force this stream to close.longgetPosition()Return the current position in the InputStream, as an offset from the beginning of the InputStream.private intin_available()private voidinit(SharedFileInputStream.SharedFile sf, int size)voidmark(int readlimit)See the general contract of themarkmethod ofInputStream.booleanmarkSupported()Tests if this input stream supports themarkandresetmethods.java.io.InputStreamnewStream(long start, long end)Return a new InputStream representing a subset of the data from this InputStream, starting atstart(inclusive) up toend(exclusive).intread()See the general contract of thereadmethod ofInputStream.intread(byte[] b, int off, int len)Reads bytes from this stream into the specified byte array, starting at the given offset.private intread1(byte[] b, int off, int len)Read characters into a portion of an array, reading from the underlying stream at most once if necessary.voidreset()See the general contract of theresetmethod ofInputStream.longskip(long n)See the general contract of theskipmethod ofInputStream.
-
-
-
Field Detail
-
defaultBufferSize
private static int defaultBufferSize
-
in
protected java.io.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.
-
master
private boolean master
True if this is a top level stream created directly by "new". False if this is a derived stream created by newStream.
-
sf
private SharedFileInputStream.SharedFile sf
-
-
Constructor Detail
-
SharedFileInputStream
public SharedFileInputStream(java.io.File file) throws java.io.IOExceptionCreates aSharedFileInputStreamfor the file.- Parameters:
file- the file- Throws:
java.io.IOException- for errors opening the file
-
SharedFileInputStream
public SharedFileInputStream(java.lang.String file) throws java.io.IOExceptionCreates aSharedFileInputStreamfor the named file- Parameters:
file- the file- Throws:
java.io.IOException- for errors opening the file
-
SharedFileInputStream
public SharedFileInputStream(java.io.File file, int size) throws java.io.IOExceptionCreates aSharedFileInputStreamwith the specified buffer size.- Parameters:
file- the filesize- the buffer size.- Throws:
java.io.IOException- for errors opening the filejava.lang.IllegalArgumentException- if size ≤ 0.
-
SharedFileInputStream
public SharedFileInputStream(java.lang.String file, int size) throws java.io.IOExceptionCreates aSharedFileInputStreamwith the specified buffer size.- Parameters:
file- the filesize- the buffer size.- Throws:
java.io.IOException- for errors opening the filejava.lang.IllegalArgumentException- if size ≤ 0.
-
SharedFileInputStream
private SharedFileInputStream(SharedFileInputStream.SharedFile sf, long start, long len, int bufsize)
Used internally by thenewStreammethod.
-
-
Method Detail
-
ensureOpen
private void ensureOpen() throws java.io.IOExceptionCheck to make sure that this stream has not been closed- Throws:
java.io.IOException
-
init
private void init(SharedFileInputStream.SharedFile sf, int size) throws java.io.IOException
- Throws:
java.io.IOException
-
fill
private void fill() throws java.io.IOExceptionFills 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:
java.io.IOException
-
read
public int read() throws java.io.IOExceptionSee the general contract of thereadmethod ofInputStream.- Overrides:
readin classjava.io.BufferedInputStream- Returns:
- the next byte of data, or
-1if the end of the stream is reached. - Throws:
java.io.IOException- if an I/O error occurs.
-
read1
private int read1(byte[] b, int off, int len) throws java.io.IOExceptionRead characters into a portion of an array, reading from the underlying stream at most once if necessary.- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOExceptionReads bytes from this stream into the specified byte array, starting at the given offset.This method implements the general contract of the corresponding
method of thereadclass.InputStream- Overrides:
readin classjava.io.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
-1if the end of the stream has been reached. - Throws:
java.io.IOException- if an I/O error occurs.
-
skip
public long skip(long n) throws java.io.IOExceptionSee the general contract of theskipmethod ofInputStream.- Overrides:
skipin classjava.io.BufferedInputStream- Parameters:
n- the number of bytes to be skipped.- Returns:
- the actual number of bytes skipped.
- Throws:
java.io.IOException- if an I/O error occurs.
-
available
public int available() throws java.io.IOExceptionReturns the number of bytes that can be read from this input stream without blocking.- Overrides:
availablein classjava.io.BufferedInputStream- Returns:
- the number of bytes that can be read from this input stream without blocking.
- Throws:
java.io.IOException- if an I/O error occurs.
-
in_available
private int in_available() throws java.io.IOException- Throws:
java.io.IOException
-
mark
public void mark(int readlimit)
See the general contract of themarkmethod ofInputStream.- Overrides:
markin classjava.io.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 java.io.IOExceptionSee the general contract of theresetmethod ofInputStream.If
markposis-1(no mark has been set or the mark has been invalidated), anIOExceptionis thrown. Otherwise,posis set equal tomarkpos.- Overrides:
resetin classjava.io.BufferedInputStream- Throws:
java.io.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 themarkandresetmethods. ThemarkSupportedmethod ofSharedFileInputStreamreturnstrue.- Overrides:
markSupportedin classjava.io.BufferedInputStream- Returns:
- a
booleanindicating if this stream type supports themarkandresetmethods. - See Also:
InputStream.mark(int),InputStream.reset()
-
close
public void close() throws java.io.IOExceptionCloses this input stream and releases any system resources associated with the stream.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classjava.io.BufferedInputStream- Throws:
java.io.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:
getPositionin interfaceSharedInputStream- Returns:
- the current position
-
newStream
public java.io.InputStream newStream(long start, long end)Return a new InputStream representing a subset of the data from this InputStream, starting atstart(inclusive) up toend(exclusive).startmust be non-negative. Ifendis -1, the new stream ends at the same place as this stream. The returned InputStream will also implement the SharedInputStream interface.- Specified by:
newStreamin interfaceSharedInputStream- Parameters:
start- the starting positionend- the ending position + 1- Returns:
- the new stream
-
finalize
protected void finalize() throws java.lang.ThrowableForce this stream to close.- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable
-
-