public class JFIFInputStream
extends java.io.FilterInputStream
This InputStream uses two special marker values which do not exist in the JFIF stream:
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.
Source:
JPEG File Interchange Format Version 1.02
http://www.jpeg.org/public/jfif.pdf
Modifier and Type | Class and Description |
---|---|
static class |
JFIFInputStream.Segment
Represents a segment within a JFIF File.
|
Modifier and Type | Field and Description |
---|---|
static int |
APP1_MARKER
APP1_MARKER Reserved for application use
|
static int |
APP2_MARKER
APP2_MARKER Reserved for application use
|
static int |
EOI_MARKER
End of image
|
static int |
JPG0_MARKER
Reserved for JPEG extensions
|
static 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 |
SOI_MARKER
Start of image
|
static int |
SOS_MARKER
Start of scan
|
static int |
TEM_MARKER
Temporary private use in arithmetic coding
|
Constructor and Description |
---|
JFIFInputStream(java.io.InputStream in) |
Modifier and Type | Method and 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 the
mark
and reset methods. |
int |
read()
Reads the next byte of data from this input stream.
|
int |
read(byte[] b,
int off,
int len)
Reads up to
len b of data from this input stream
into an array of b. |
void |
reset()
Repositions this stream to the position at the time the
mark method was last called on this input stream. |
long |
skip(long n)
Skips over and discards
n b of data from the
input stream. |
public static final int JUNK_MARKER
public static final int SOI_MARKER
public static final int EOI_MARKER
public static final int TEM_MARKER
public static final int SOS_MARKER
public static final int APP1_MARKER
public static final int APP2_MARKER
public static final int JPG0_MARKER
public static final int JPG1_MARKER
public static final int JPG2_MARKER
public static final int JPG3_MARKER
public static final int JPG4_MARKER
public static final int JPG5_MARKER
public static final int JPG6_MARKER
public static final int JPG7_MARKER
public static final int JPG8_MARKER
public static final int JPG9_MARKER
public static final int JPGA_MARKER
public static final int JPGB_MARKER
public static final int JPGC_MARKER
public static final int JPGD_MARKER
public JFIFInputStream.Segment getSegment() throws java.io.IOException
java.io.IOException
public JFIFInputStream.Segment getNextSegment() throws java.io.IOException
java.io.IOException
public long getStreamPosition()
public int read() throws java.io.IOException
int
in the range
0
to 255
. 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.
read
in class java.io.FilterInputStream
-1
if the end of the
stream is reached.java.io.IOException
- if an I/O error occurs.FilterInputStream.in
public int read(byte[] b, int off, int len) throws java.io.IOException
len
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.
read
in class java.io.FilterInputStream
b
- the buffer into which the data is read.off
- the start offset of the data.len
- the maximum number of b read.-1
if there is no more data because the end of
the stream has been reached.java.io.IOException
- if an I/O error occurs.FilterInputStream.in
public long skip(long n) throws java.io.IOException
n
b of data from the
input stream. The skip
method may, for a variety of
reasons, end up skipping over some smaller number of b,
possibly 0
. The actual number of b skipped is
returned.
This method
simply performs in.skip(n)
.
skip
in class java.io.FilterInputStream
n
- the number of b to be skipped.java.io.IOException
- if an I/O error occurs.public void mark(int readlimit)
reset
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)
.
mark
in class java.io.FilterInputStream
readlimit
- the maximum limit of b that can be read before
the mark position becomes invalid.FilterInputStream.in
,
FilterInputStream.reset()
public void reset() throws java.io.IOException
mark
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.
reset
in class java.io.FilterInputStream
java.io.IOException
- if the stream has not been marked or if the
mark has been invalidated.FilterInputStream.in
,
FilterInputStream.mark(int)
public boolean markSupported()
mark
and reset
methods.
This method
simply performs in.markSupported()
.markSupported
in class java.io.FilterInputStream
true
if this stream type supports the
mark
and reset
method;
false
otherwise.FilterInputStream.in
,
InputStream.mark(int)
,
InputStream.reset()
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"