Class JFIFInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable
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.
Source:
JPEG File Interchange Format Version 1.02
http://www.jpeg.org/public/jfif.pdf
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classRepresents a segment within a JFIF File. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intAPP1_MARKER Reserved for application usestatic final intAPP2_MARKER Reserved for application usestatic final intEnd of imagestatic final intReserved for JPEG extensionsstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intJUNK_MARKER Marker (for data which is not part of the JFIF stream.static final intStart of imagestatic final intStart of scanstatic final intTemporary private use in arithmetic coding -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionGets the next segment from the input stream.Gets the current segment from the input stream.longvoidmark(int readlimit) Marks the current position in this input stream.booleanTests if this input stream supports themarkandresetmethods.intread()Reads the next byte of data from this input stream.intread(byte[] b, int off, int len) Reads up tolenb of data from this input stream into an array of b.voidreset()Repositions this stream to the position at the time themarkmethod was last called on this input stream.longskip(long n) Skips over and discardsnb of data from the input stream.Methods inherited from class java.io.FilterInputStream
available, close, readMethods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
JUNK_MARKER
public static final int JUNK_MARKERJUNK_MARKER Marker (for data which is not part of the JFIF stream.- See Also:
-
SOI_MARKER
public static final int SOI_MARKERStart of image- See Also:
-
EOI_MARKER
public static final int EOI_MARKEREnd of image- See Also:
-
TEM_MARKER
public static final int TEM_MARKERTemporary private use in arithmetic coding- See Also:
-
SOS_MARKER
public static final int SOS_MARKERStart of scan- See Also:
-
APP1_MARKER
public static final int APP1_MARKERAPP1_MARKER Reserved for application use- See Also:
-
APP2_MARKER
public static final int APP2_MARKERAPP2_MARKER Reserved for application use- See Also:
-
JPG0_MARKER
public static final int JPG0_MARKERReserved for JPEG extensions- See Also:
-
JPG1_MARKER
public static final int JPG1_MARKER- See Also:
-
JPG2_MARKER
public static final int JPG2_MARKER- See Also:
-
JPG3_MARKER
public static final int JPG3_MARKER- See Also:
-
JPG4_MARKER
public static final int JPG4_MARKER- See Also:
-
JPG5_MARKER
public static final int JPG5_MARKER- See Also:
-
JPG6_MARKER
public static final int JPG6_MARKER- See Also:
-
JPG7_MARKER
public static final int JPG7_MARKER- See Also:
-
JPG8_MARKER
public static final int JPG8_MARKER- See Also:
-
JPG9_MARKER
public static final int JPG9_MARKER- See Also:
-
JPGA_MARKER
public static final int JPGA_MARKER- See Also:
-
JPGB_MARKER
public static final int JPGB_MARKER- See Also:
-
JPGC_MARKER
public static final int JPGC_MARKER- See Also:
-
JPGD_MARKER
public static final int JPGD_MARKER- See Also:
-
-
Constructor Details
-
JFIFInputStream
-
-
Method Details
-
getSegment
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
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
Reads the next byte of data from this input stream. The value byte is returned as anintin the range0to255. If no byte is available because the end of the stream has been reached, the value-1is 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:
readin classFilterInputStream- Returns:
- the next byte of data, or
-1if the end of the stream is reached. - Throws:
IOException- if an I/O error occurs.- See Also:
-
read
Reads up tolenb 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:
readin 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
-1if there is no more data because the end of the stream has been reached. - Throws:
IOException- if an I/O error occurs.- See Also:
-
skip
Skips over and discardsnb of data from the input stream. Theskipmethod 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:
skipin 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 theresetmethod repositions this stream at the last marked position so that subsequent reads re-read the same b.The
readlimitargument 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:
markin classFilterInputStream- Parameters:
readlimit- the maximum limit of b that can be read before the mark position becomes invalid.- See Also:
-
reset
Repositions this stream to the position at the time themarkmethod 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:
resetin classFilterInputStream- Throws:
IOException- if the stream has not been marked or if the mark has been invalidated.- See Also:
-
markSupported
public boolean markSupported()Tests if this input stream supports themarkandresetmethods. This method simply performsin.markSupported().- Overrides:
markSupportedin classFilterInputStream- Returns:
trueif this stream type supports themarkandresetmethod;falseotherwise.- See Also:
-