Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.monte.media.jpeg
Class JFIFInputStream

    java.lang.Object
      java.io.InputStream
          java.io.FilterInputStream
              org.monte.media.jpeg.JFIFInputStream

All Implemented Interfaces:
  java.io.Closeable

    public class JFIFInputStream

extends java.io.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.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(java.io.File f)`
`JFIFInputStream(java.io.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(java.io.File f)
                    throws java.io.IOException

Throws:
  `java.io.IOException`

### JFIFInputStream

    public JFIFInputStream(java.io.InputStream in)

Method Detail

### getSegment

    public JFIFInputStream.Segment getSegment()
                                       throws java.io.IOException

  Gets the current segment from the input stream.

  Returns:
    The current segment. Returns null, if we encountered the end of the stream.
  Throws:
    `java.io.IOException`

### getNextSegment

    public JFIFInputStream.Segment getNextSegment()
                                           throws java.io.IOException

  Gets the next segment from the input stream.

  Returns:
    The next segment. Returns null, if we encountered the end of the stream.
  Throws:
    `java.io.IOException`

### getStreamPosition

    public long getStreamPosition()

### read

    public int read()
             throws java.io.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 `java.io.FilterInputStream`
  Returns:
    the next byte of data, or `-1` if the end of the stream is reached.
  Throws:
    `java.io.IOException` - if an I/O error occurs.
  See Also:
    `FilterInputStream.in`

### read

    public int read(byte[] b,
                    int off,
                    int len)
             throws java.io.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 `java.io.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:
    `java.io.IOException` - if an I/O error occurs.
  See Also:
    `FilterInputStream.in`

### skipFully

    public final void skipFully(long n)
                         throws java.io.IOException

  Fully skips the specified number of bytes.

  Throws:
    `java.io.IOException`

### skip

    public long skip(long n)
              throws java.io.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 `java.io.FilterInputStream`
  Parameters:
    `n` - the number of b to be skipped.
  Returns:
    the actual number of b skipped.
  Throws:
    `java.io.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 `java.io.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 java.io.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 `java.io.FilterInputStream`
  Throws:
    `java.io.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 `java.io.FilterInputStream`
  Returns:
    `true` if this stream type supports the `mark` and `reset` method; `false` otherwise.
  See Also:
    `FilterInputStream.in`, `InputStream.mark(int)`, `InputStream.reset()`

Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD