org.monte.media.jpeg
Class JFIFInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by org.monte.media.jpeg.JFIFInputStream
All Implemented Interfaces:
Closeable

public class JFIFInputStream
extends FilterInputStream

JFIFInputStream.

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.

References:
JPEG File Interchange Format Version 1.02
http://www.jpeg.org/public/jfif.pdf

Pennebaker, W., Mitchell, J. (1993).
JPEG Still Image Data Compression Standard.
Chapmann & Hall, New York.
ISBN 0-442-01272-1

Version:
$Id: JFIFInputStream.java 175 2012-03-09 14:32:55Z werner $
Author:
Werner Randelshofer, Hausmatt 10, CH-6405 Immensee

Nested Class Summary
static class JFIFInputStream.Segment
          Represents a segment within a JFIF File.
 
Field Summary
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 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 markers
static 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 image
static int SOS_MARKER
          Start of scan
static int TEM_MARKER
          Temporary private use in arithmetic coding
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
JFIFInputStream(File f)
           
JFIFInputStream(InputStream in)
           
 
Method Summary
 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.
 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.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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 an 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.

Overrides:
read in class FilterInputStream
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 to 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.

Overrides:
read in class FilterInputStream
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 discards 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).

Overrides:
skip in class FilterInputStream
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 the 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).

Overrides:
mark in class FilterInputStream
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 the 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.

Overrides:
reset in class FilterInputStream
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 the mark and reset methods. This method simply performs in.markSupported().

Overrides:
markSupported in class FilterInputStream
Returns:
true if this stream type supports the mark and reset method; false otherwise.
See Also:
FilterInputStream.in, InputStream.mark(int), InputStream.reset()


Copyright © 2016 Silverpeas. All Rights Reserved.