Class JFIFInputStream
- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- org.monte.media.jpeg.JFIFInputStream
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
public class JFIFInputStream extends FilterInputStream
JFIFInputStream.This InputStream uses two special marker values which do not exist in the JFIF stream:
- -1: marks junk data at the beginning of the file.
- 0: marks entropy encoded image data.
The junk data at the beginning of the file can be accessed by calling the read-methods immediately after opening the stream. Call nextSegment() immediately after opening the stream if you are not interested into this junk data.
Junk data at the end of the file is delivered as part of the EOI_MARKER segment. Finish reading after encountering the EOI_MARKER segment if you are not interested in this junk data.
References:
JPEG File Interchange Format Version 1.02
http://www.jpeg.org/public/jfif.pdfPennebaker, W., Mitchell, J. (1993).
JPEG Still Image Data Compression Standard.
Chapmann & Hall, New York.
ISBN 0-442-01272-1- Version:
- $Id: JFIFInputStream.java 348 2015-09-23 17:46:43Z werner $
- Author:
- Werner Randelshofer, Hausmatt 10, CH-6405 Goldau
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
JFIFInputStream.Segment
Represents a segment within a JFIF File.
-
Field Summary
Fields Modifier and Type Field Description static int
APP1_MARKER
APP1_MARKER Reserved for application usestatic int
APP2_MARKER
APP2_MARKER Reserved for application usestatic int
EOI_MARKER
End of imagestatic int
JPG0_MARKER
Reserved for JPEG extensionsstatic int
JPG1_MARKER
static int
JPG2_MARKER
static int
JPG3_MARKER
static int
JPG4_MARKER
static int
JPG5_MARKER
static int
JPG6_MARKER
static int
JPG7_MARKER
static int
JPG8_MARKER
static int
JPG9_MARKER
static int
JPGA_MARKER
static int
JPGB_MARKER
static int
JPGC_MARKER
static int
JPGD_MARKER
static int
JUNK_MARKER
JUNK_MARKER Marker (for data which is not part of the JFIF stream.static int
RST0_MARKER
static int
RST1_MARKER
static int
RST2_MARKER
static int
RST3_MARKER
static int
RST4_MARKER
static int
RST5_MARKER
static int
RST6_MARKER
static int
RST7_MARKER
static int
SOF0_MARKER
Start of frame markersstatic int
SOF1_MARKER
static int
SOF2_MARKER
static int
SOF3_MARKER
static int
SOF5_MARKER
static int
SOF6_MARKER
static int
SOF7_MARKER
static int
SOF9_MARKER
static int
SOFA_MARKER
static int
SOFB_MARKER
static int
SOFD_MARKER
static int
SOFE_MARKER
static int
SOFF_MARKER
static int
SOI_MARKER
Start of imagestatic int
SOS_MARKER
Start of scanstatic int
TEM_MARKER
Temporary private use in arithmetic coding-
Fields inherited from class java.io.FilterInputStream
in
-
-
Constructor Summary
Constructors Constructor Description JFIFInputStream(File f)
JFIFInputStream(InputStream in)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description JFIFInputStream.Segment
getNextSegment()
Gets the next segment from the input stream.JFIFInputStream.Segment
getSegment()
Gets the current segment from the input stream.long
getStreamPosition()
void
mark(int readlimit)
Marks the current position in this input stream.boolean
markSupported()
Tests if this input stream supports themark
andreset
methods.int
read()
Reads the next byte of data from this input stream.int
read(byte[] b, int off, int len)
Reads up tolen
b of data from this input stream into an array of b.void
reset()
Repositions this stream to the position at the time themark
method was last called on this input stream.long
skip(long n)
Skips over and discardsn
b of data from the input stream.void
skipFully(long n)
Fully skips the specified number of bytes.-
Methods inherited from class java.io.FilterInputStream
available, close, read
-
Methods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
-
-
-
-
Field Detail
-
JUNK_MARKER
public static final int JUNK_MARKER
JUNK_MARKER Marker (for data which is not part of the JFIF stream.- See Also:
- Constant Field Values
-
SOI_MARKER
public static final int SOI_MARKER
Start of image- See Also:
- Constant Field Values
-
EOI_MARKER
public static final int EOI_MARKER
End of image- See Also:
- Constant Field Values
-
TEM_MARKER
public static final int TEM_MARKER
Temporary private use in arithmetic coding- See Also:
- Constant Field Values
-
SOS_MARKER
public static final int SOS_MARKER
Start of scan- See Also:
- Constant Field Values
-
APP1_MARKER
public static final int APP1_MARKER
APP1_MARKER Reserved for application use- See Also:
- Constant Field Values
-
APP2_MARKER
public static final int APP2_MARKER
APP2_MARKER Reserved for application use- See Also:
- Constant Field Values
-
JPG0_MARKER
public static final int JPG0_MARKER
Reserved for JPEG extensions- See Also:
- Constant Field Values
-
JPG1_MARKER
public static final int JPG1_MARKER
- See Also:
- Constant Field Values
-
JPG2_MARKER
public static final int JPG2_MARKER
- See Also:
- Constant Field Values
-
JPG3_MARKER
public static final int JPG3_MARKER
- See Also:
- Constant Field Values
-
JPG4_MARKER
public static final int JPG4_MARKER
- See Also:
- Constant Field Values
-
JPG5_MARKER
public static final int JPG5_MARKER
- See Also:
- Constant Field Values
-
JPG6_MARKER
public static final int JPG6_MARKER
- See Also:
- Constant Field Values
-
JPG7_MARKER
public static final int JPG7_MARKER
- See Also:
- Constant Field Values
-
JPG8_MARKER
public static final int JPG8_MARKER
- See Also:
- Constant Field Values
-
JPG9_MARKER
public static final int JPG9_MARKER
- See Also:
- Constant Field Values
-
JPGA_MARKER
public static final int JPGA_MARKER
- See Also:
- Constant Field Values
-
JPGB_MARKER
public static final int JPGB_MARKER
- See Also:
- Constant Field Values
-
JPGC_MARKER
public static final int JPGC_MARKER
- See Also:
- Constant Field Values
-
JPGD_MARKER
public static final int JPGD_MARKER
- See Also:
- Constant Field Values
-
SOF0_MARKER
public static final int SOF0_MARKER
Start of frame markers- See Also:
- Constant Field Values
-
SOF1_MARKER
public static final int SOF1_MARKER
- See Also:
- Constant Field Values
-
SOF2_MARKER
public static final int SOF2_MARKER
- See Also:
- Constant Field Values
-
SOF3_MARKER
public static final int SOF3_MARKER
- See Also:
- Constant Field Values
-
SOF5_MARKER
public static final int SOF5_MARKER
- See Also:
- Constant Field Values
-
SOF6_MARKER
public static final int SOF6_MARKER
- See Also:
- Constant Field Values
-
SOF7_MARKER
public static final int SOF7_MARKER
- See Also:
- Constant Field Values
-
SOF9_MARKER
public static final int SOF9_MARKER
- See Also:
- Constant Field Values
-
SOFA_MARKER
public static final int SOFA_MARKER
- See Also:
- Constant Field Values
-
SOFB_MARKER
public static final int SOFB_MARKER
- See Also:
- Constant Field Values
-
SOFD_MARKER
public static final int SOFD_MARKER
- See Also:
- Constant Field Values
-
SOFE_MARKER
public static final int SOFE_MARKER
- See Also:
- Constant Field Values
-
SOFF_MARKER
public static final int SOFF_MARKER
- See Also:
- Constant Field Values
-
RST0_MARKER
public static final int RST0_MARKER
- See Also:
- Constant Field Values
-
RST1_MARKER
public static final int RST1_MARKER
- See Also:
- Constant Field Values
-
RST2_MARKER
public static final int RST2_MARKER
- See Also:
- Constant Field Values
-
RST3_MARKER
public static final int RST3_MARKER
- See Also:
- Constant Field Values
-
RST4_MARKER
public static final int RST4_MARKER
- See Also:
- Constant Field Values
-
RST5_MARKER
public static final int RST5_MARKER
- See Also:
- Constant Field Values
-
RST6_MARKER
public static final int RST6_MARKER
- See Also:
- Constant Field Values
-
RST7_MARKER
public static final int RST7_MARKER
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
JFIFInputStream
public JFIFInputStream(File f) throws IOException
- Throws:
IOException
-
JFIFInputStream
public JFIFInputStream(InputStream in)
-
-
Method Detail
-
getSegment
public JFIFInputStream.Segment getSegment() throws IOException
Gets the current segment from the input stream.- Returns:
- The current segment. Returns null, if we encountered the end of the stream.
- Throws:
IOException
-
getNextSegment
public JFIFInputStream.Segment getNextSegment() throws IOException
Gets the next segment from the input stream.- Returns:
- The next segment. Returns null, if we encountered the end of the stream.
- Throws:
IOException
-
getStreamPosition
public long getStreamPosition()
-
read
public int read() throws IOException
Reads the next byte of data from this input stream. The value byte is returned as anint
in the range0
to255
. If no byte is available because the end of the stream has been reached, the value-1
is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.This method simply performs
in.read()
and returns the result.- Overrides:
read
in classFilterInputStream
- Returns:
- the next byte of data, or
-1
if the end of the stream is reached. - Throws:
IOException
- if an I/O error occurs.- See Also:
FilterInputStream.in
-
read
public int read(byte[] b, int off, int len) throws IOException
Reads up tolen
b of data from this input stream into an array of b. This method blocks until some input is available.This method simply performs
in.read(b, off, len)
and returns the result.- Overrides:
read
in classFilterInputStream
- Parameters:
b
- the buffer into which the data is read.off
- the start offset of the data.len
- the maximum number of b read.- Returns:
- the total number of b read into the buffer, or
-1
if there is no more data because the end of the stream has been reached. - Throws:
IOException
- if an I/O error occurs.- See Also:
FilterInputStream.in
-
skipFully
public final void skipFully(long n) throws IOException
Fully skips the specified number of bytes.- Throws:
IOException
-
skip
public long skip(long n) throws IOException
Skips over and discardsn
b of data from the input stream. Theskip
method may, for a variety of reasons, end up skipping over some smaller number of b, possibly0
. The actual number of b skipped is returned.This method simply performs
in.skip(n)
.- Overrides:
skip
in classFilterInputStream
- Parameters:
n
- the number of b to be skipped.- Returns:
- the actual number of b skipped.
- Throws:
IOException
- if an I/O error occurs.
-
mark
public void mark(int readlimit)
Marks the current position in this input stream. A subsequent call to thereset
method repositions this stream at the last marked position so that subsequent reads re-read the same b.The
readlimit
argument tells this input stream to allow that many b to be read before the mark position gets invalidated.This method simply performs
in.mark(readlimit)
.- Overrides:
mark
in classFilterInputStream
- Parameters:
readlimit
- the maximum limit of b that can be read before the mark position becomes invalid.- See Also:
FilterInputStream.in
,FilterInputStream.reset()
-
reset
public void reset() throws IOException
Repositions this stream to the position at the time themark
method was last called on this input stream.This method simply performs
in.reset()
.Stream marks are intended to be used in situations where you need to read ahead a little to see what's in the stream. Often this is most easily done by invoking some general parser. If the stream is of the type handled by the parse, it just chugs along happily. If the stream is not of that type, the parser should toss an exception when it fails. If this happens within readlimit b, it allows the outer code to reset the stream and try another parser.
- Overrides:
reset
in classFilterInputStream
- Throws:
IOException
- if the stream has not been marked or if the mark has been invalidated.- See Also:
FilterInputStream.in
,FilterInputStream.mark(int)
-
markSupported
public boolean markSupported()
Tests if this input stream supports themark
andreset
methods. This method simply performsin.markSupported()
.- Overrides:
markSupported
in classFilterInputStream
- Returns:
true
if this stream type supports themark
andreset
method;false
otherwise.- See Also:
FilterInputStream.in
,InputStream.mark(int)
,InputStream.reset()
-
-