javax.imageio.stream
Class ImageInputStreamImpl

java.lang.Object
  extended by javax.imageio.stream.ImageInputStreamImpl
All Implemented Interfaces:
DataInput, ImageInputStream
Direct Known Subclasses:
FileCacheImageInputStream, FileImageInputStream, ImageOutputStreamImpl, MemoryCacheImageInputStream

public abstract class ImageInputStreamImpl
extends Object
implements ImageInputStream


Field Summary
protected  int bitOffset
           
protected  ByteOrder byteOrder
           
protected  long flushedPos
           
protected  long streamPos
           
 
Constructor Summary
ImageInputStreamImpl()
           
 
Method Summary
protected  void checkClosed()
           
 void close()
           
protected  void finalize()
          Called on an object by the Virtual Machine at most once, at some point after the Object is determined unreachable but before it is destroyed.
 void flush()
           
 void flushBefore(long position)
           
 int getBitOffset()
           
 ByteOrder getByteOrder()
           
 long getFlushedPosition()
           
 long getStreamPosition()
           
 boolean isCached()
           
 boolean isCachedFile()
           
 boolean isCachedMemory()
           
 long length()
           
 void mark()
           
abstract  int read()
           
 int read(byte[] data)
           
abstract  int read(byte[] data, int offset, int len)
           
 int readBit()
           
 long readBits(int numBits)
           
 boolean readBoolean()
          Reads a byte and checks whether or not its value is zero.
 byte readByte()
          Reads a signed byte.
 void readBytes(IIOByteBuffer buffer, int len)
          Reads up to a specified number of bytes, and modifies a IIOByteBuffer to hold the read data.
 char readChar()
          Reads an unsigned 16-bit integer.
 double readDouble()
          Reads an IEEE 64-bit double-precision floating point number.
 float readFloat()
          Reads an IEEE 32-bit single-precision floating point number.
 void readFully(byte[] data)
          Reads a sequence of signed 8-bit integers into a byte[] array.
 void readFully(byte[] data, int offset, int len)
          Reads a sequence of signed 8-bit integers into a byte[] array.
 void readFully(char[] data, int offset, int len)
          Reads a sequence of unsigned 16-bit integers into a char[] array.
 void readFully(double[] data, int offset, int len)
          Reads a sequence of IEEE 64-bit double-precision floating point numbers into a double[] array.
 void readFully(float[] data, int offset, int len)
          Reads a sequence of IEEE 32-bit single-precision floating point numbers into a float[] array.
 void readFully(int[] data, int offset, int len)
          Reads a sequence of signed 32-bit integers into a long[] array.
 void readFully(long[] data, int offset, int len)
          Reads a sequence of signed 64-bit integers into a long[] array.
 void readFully(short[] data, int offset, int len)
          Reads a sequence of signed 16-bit integers into a short[] array.
 int readInt()
          Reads a signed 32-bit integer.
 String readLine()
          This method reads the next line of text data from an input stream.
 long readLong()
          Reads a signed 64-bit integer.
 short readShort()
          Reads an signed 16-bit integer.
 int readUnsignedByte()
          Reads an unsigned byte.
 long readUnsignedInt()
          Reads an unsigned 32-bit integer.
 int readUnsignedShort()
          Reads an unsigned 16-bit integer.
 String readUTF()
          This method reads a String from an input stream that is encoded in a modified UTF-8 format.
 void reset()
           
 void seek(long position)
           
 void setBitOffset(int bitOffset)
           
 void setByteOrder(ByteOrder byteOrder)
           
 int skipBytes(int num)
          This method skips and discards the specified number of bytes in an input stream.
 long skipBytes(long num)
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

bitOffset

protected int bitOffset

byteOrder

protected ByteOrder byteOrder

flushedPos

protected long flushedPos

streamPos

protected long streamPos
Constructor Detail

ImageInputStreamImpl

public ImageInputStreamImpl()
Method Detail

checkClosed

protected final void checkClosed()
                          throws IOException
Throws:
IOException

close

public void close()
           throws IOException
Specified by:
close in interface ImageInputStream
Throws:
IOException

finalize

protected void finalize()
                 throws Throwable
Description copied from class: Object
Called on an object by the Virtual Machine at most once, at some point after the Object is determined unreachable but before it is destroyed. You would think that this means it eventually is called on every Object, but this is not necessarily the case. If execution terminates abnormally, garbage collection does not always happen. Thus you cannot rely on this method to always work. For finer control over garbage collection, use references from the java.lang.ref package.

Virtual Machines are free to not call this method if they can determine that it does nothing important; for example, if your class extends Object and overrides finalize to do simply super.finalize().

finalize() will be called by a Thread that has no locks on any Objects, and may be called concurrently. There are no guarantees on the order in which multiple objects are finalized. This means that finalize() is usually unsuited for performing actions that must be thread-safe, and that your implementation must be use defensive programming if it is to always work.

If an Exception is thrown from finalize() during garbage collection, it will be patently ignored and the Object will still be destroyed.

It is allowed, although not typical, for user code to call finalize() directly. User invocation does not affect whether automatic invocation will occur. It is also permitted, although not recommended, for a finalize() method to "revive" an object by making it reachable from normal code again.

Unlike constructors, finalize() does not get called for an object's superclass unless the implementation specifically calls super.finalize().

The default implementation does nothing.

Overrides:
finalize in class Object
Throws:
Throwable - permits a subclass to throw anything in an overridden version; but the default throws nothing
See Also:
System.gc(), System.runFinalizersOnExit(boolean), java.lang.ref

flush

public void flush()
           throws IOException
Specified by:
flush in interface ImageInputStream
Throws:
IOException

flushBefore

public void flushBefore(long position)
                 throws IOException
Specified by:
flushBefore in interface ImageInputStream
Throws:
IOException

getBitOffset

public int getBitOffset()
                 throws IOException
Specified by:
getBitOffset in interface ImageInputStream
Throws:
IOException

getByteOrder

public ByteOrder getByteOrder()
Specified by:
getByteOrder in interface ImageInputStream

getFlushedPosition

public long getFlushedPosition()
Specified by:
getFlushedPosition in interface ImageInputStream

getStreamPosition

public long getStreamPosition()
                       throws IOException
Specified by:
getStreamPosition in interface ImageInputStream
Throws:
IOException

isCached

public boolean isCached()
Specified by:
isCached in interface ImageInputStream

isCachedFile

public boolean isCachedFile()
Specified by:
isCachedFile in interface ImageInputStream

isCachedMemory

public boolean isCachedMemory()
Specified by:
isCachedMemory in interface ImageInputStream

length

public long length()
Specified by:
length in interface ImageInputStream

mark

public void mark()
Specified by:
mark in interface ImageInputStream

read

public abstract int read()
                  throws IOException
Specified by:
read in interface ImageInputStream
Throws:
IOException

read

public abstract int read(byte[] data,
                         int offset,
                         int len)
                  throws IOException
Specified by:
read in interface ImageInputStream
Throws:
IOException

read

public int read(byte[] data)
         throws IOException
Specified by:
read in interface ImageInputStream
Throws:
IOException

readBit

public int readBit()
            throws IOException
Specified by:
readBit in interface ImageInputStream
Throws:
IOException

readBits

public long readBits(int numBits)
              throws IOException
Specified by:
readBits in interface ImageInputStream
Throws:
IOException

readBoolean

public boolean readBoolean()
                    throws IOException
Description copied from interface: ImageInputStream
Reads a byte and checks whether or not its value is zero.

The bit offset is set to zero before the byte is read.

Specified by:
readBoolean in interface DataInput
Specified by:
readBoolean in interface ImageInputStream
Returns:
The boolean value read
Throws:
EOFException - if the input stream is at its end.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readBit(), ImageInputStream.readByte(), ImageInputStream.readFully(byte[], int, int)

readByte

public byte readByte()
              throws IOException
Description copied from interface: ImageInputStream
Reads a signed byte.

The bit offset is set to zero before any data is read.

Specified by:
readByte in interface DataInput
Specified by:
readByte in interface ImageInputStream
Returns:
The byte value read
Throws:
EOFException - if the input stream is at its end.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readUnsignedByte(), ImageInputStream.readFully(byte[], int, int)

readBytes

public void readBytes(IIOByteBuffer buffer,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads up to a specified number of bytes, and modifies a IIOByteBuffer to hold the read data.

The bit offset is set to zero before any data is read.

Specified by:
readBytes in interface ImageInputStream
Parameters:
buffer - an IIOByteBuffer that will hold the read data.
len - the maximum number of bytes to read.
Throws:
IOException - if some general problem happens with accessing data.

readChar

public char readChar()
              throws IOException
Description copied from interface: ImageInputStream
Reads an unsigned 16-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

This method does the same as ImageInputStream.readUnsignedShort().

Specified by:
readChar in interface DataInput
Specified by:
readChar in interface ImageInputStream
Returns:
The char value read
Throws:
EOFException - if the input stream ends before all two bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readFully(char[], int, int)

readDouble

public double readDouble()
                  throws IOException
Description copied from interface: ImageInputStream
Reads an IEEE 64-bit double-precision floating point number. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readDouble in interface DataInput
Specified by:
readDouble in interface ImageInputStream
Returns:
The double value read
Throws:
EOFException - if the input stream ends before all eight bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readFully(double[], int, int)

readFloat

public float readFloat()
                throws IOException
Description copied from interface: ImageInputStream
Reads an IEEE 32-bit single-precision floating point number. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFloat in interface DataInput
Specified by:
readFloat in interface ImageInputStream
Returns:
The float value read
Throws:
EOFException - if the input stream ends before all four bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readFully(float[], int, int)

readFully

public void readFully(byte[] data)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of signed 8-bit integers into a byte[] array.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface DataInput
Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readByte(), ImageInputStream.readFully(byte[], int, int)

readFully

public void readFully(byte[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of signed 8-bit integers into a byte[] array.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface DataInput
Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in b that will hold read data.
len - the number of bytes to read.
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readByte()

readFully

public void readFully(char[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of unsigned 16-bit integers into a char[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in c that will hold read data.
len - the number of unsigned 16-bit integers to read (which is one half of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readChar()

readFully

public void readFully(double[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of IEEE 64-bit double-precision floating point numbers into a double[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in d that will hold read data.
len - the number of IEEE 64-bit double-precision floating point numbers to read (which is one eight of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readDouble()

readFully

public void readFully(float[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of IEEE 32-bit single-precision floating point numbers into a float[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
offset - the index of the first element in d that will hold read data.
len - the number of IEEE 32-bit single-precision floating point numbers to read (which is one fourth of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readFloat()

readFully

public void readFully(int[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of signed 32-bit integers into a long[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in i that will hold read data.
len - the number of signed 32-bit integers to read (which is one fourth of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readInt()

readFully

public void readFully(long[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of signed 64-bit integers into a long[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in l that will hold read data.
len - the number of signed 64-bit integers to read (which is one eight of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readLong()

readFully

public void readFully(short[] data,
                      int offset,
                      int len)
               throws IOException
Description copied from interface: ImageInputStream
Reads a sequence of signed 16-bit integers into a short[] array. If necessary, values are converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readFully in interface ImageInputStream
Parameters:
data - an array for storing the read values.
offset - the index of the first element in s that will hold read data.
len - the number of signed 16-bit integers to read (which is one half of the number of bytes).
Throws:
EOFException - if the input stream ends before all content was read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readShort()

readInt

public int readInt()
            throws IOException
Description copied from interface: ImageInputStream
Reads a signed 32-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readInt in interface DataInput
Specified by:
readInt in interface ImageInputStream
Returns:
The int value read
Throws:
EOFException - if the input stream ends before all four bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readUnsignedInt(), ImageInputStream.readFully(int[], int, int)

readLine

public String readLine()
                throws IOException
Description copied from interface: DataInput
This method reads the next line of text data from an input stream. It operates by reading bytes and converting those bytes to char values by treating the byte read as the low eight bits of the char and using 0 as the high eight bits. Because of this, it does not support the full 16-bit Unicode character set.

The reading of bytes ends when either the end of file or a line terminator is encountered. The bytes read are then returned as a String. A line terminator is a byte sequence consisting of either \r, \n or \r\n. These termination charaters are discarded and are not returned as part of the string. A line is also terminated by an end of file condition.

Specified by:
readLine in interface DataInput
Specified by:
readLine in interface ImageInputStream
Returns:
The line read as a String
Throws:
IOException - If an error occurs

readLong

public long readLong()
              throws IOException
Description copied from interface: ImageInputStream
Reads a signed 64-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readLong in interface DataInput
Specified by:
readLong in interface ImageInputStream
Returns:
The long value read
Throws:
EOFException - if the input stream ends before all eight bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readFully(long[], int, int)

readShort

public short readShort()
                throws IOException
Description copied from interface: ImageInputStream
Reads an signed 16-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readShort in interface DataInput
Specified by:
readShort in interface ImageInputStream
Returns:
The short value read
Throws:
EOFException - if the input stream ends before all two bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readUnsignedShort(), ImageInputStream.readChar(), ImageInputStream.readFully(short[], int, int)

readUnsignedByte

public int readUnsignedByte()
                     throws IOException
Description copied from interface: ImageInputStream
Reads an unsigned byte.

The bit offset is set to zero before any data is read.

Specified by:
readUnsignedByte in interface DataInput
Specified by:
readUnsignedByte in interface ImageInputStream
Returns:
The unsigned bytes value read as a Java int.
Throws:
EOFException - if the input stream is at its end.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readByte(), ImageInputStream.readFully(byte[], int, int)

readUnsignedInt

public long readUnsignedInt()
                     throws IOException
Description copied from interface: ImageInputStream
Reads an unsigned 32-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

Specified by:
readUnsignedInt in interface ImageInputStream
Throws:
EOFException - if the input stream ends before all four bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readInt(), ImageInputStream.readFully(int[], int, int)

readUnsignedShort

public int readUnsignedShort()
                      throws IOException
Description copied from interface: ImageInputStream
Reads an unsigned 16-bit integer. If necessary, the value gets converted from the stream’s current byte order.

The bit offset is set to zero before any data is read.

This method does the same as ImageInputStream.readChar().

Specified by:
readUnsignedShort in interface DataInput
Specified by:
readUnsignedShort in interface ImageInputStream
Returns:
The unsigned short value read as a Java int.
Throws:
EOFException - if the input stream ends before all two bytes were read.
IOException - if some general problem happens with accessing data.
See Also:
ImageInputStream.readShort(), ImageInputStream.readChar(), ImageInputStream.readFully(char[], int, int)

readUTF

public String readUTF()
               throws IOException
Description copied from interface: DataInput
This method reads a String from an input stream that is encoded in a modified UTF-8 format. This format has a leading two byte sequence that contains the remaining number of bytes to read. This two byte sequence is read using the readUnsignedShort() method of this interface. After the number of remaining bytes have been determined, these bytes are read an transformed into char values. These char values are encoded in the stream using either a one, two, or three byte format. The particular format in use can be determined by examining the first byte read.

If the first byte has a high order bit of 0, then that character consists on only one byte. This character value consists of seven bits that are at positions 0 through 6 of the byte. As an example, if byte1 is the byte read from the stream, it would be converted to a char like so:

(char)byte1

If the first byte has 110 as its high order bits, then the character consists of two bytes. The bits that make up the character value are in positions 0 through 4 of the first byte and bit positions 0 through 5 of the second byte. (The second byte should have 10 as its high order bits). These values are in most significant byte first (i.e., "big endian") order.

As an example, if byte1 and byte2 are the first two bytes read respectively, and the high order bits of them match the patterns which indicate a two byte character encoding, then they would be converted to a Java char like so:

(char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F))

If the first byte has a 1110 as its high order bits, then the character consists of three bytes. The bits that make up the character value are in positions 0 through 3 of the first byte and bit positions 0 through 5 of the other two bytes. (The second and third bytes should have 10 as their high order bits). These values are in most significant byte first (i.e., "big endian") order.

As an example, if byte1, byte2, and byte3 are the three bytes read, and the high order bits of them match the patterns which indicate a three byte character encoding, then they would be converted to a Java char like so: (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F)) Note that all characters are encoded in the method that requires the fewest number of bytes with the exception of the character with the value of \<llll>u0000 which is encoded as two bytes. This is a modification of the UTF standard used to prevent C language style NUL values from appearing in the byte stream.

This method can read data that was written by an object implementing the writeUTF() method in DataOutput.

Specified by:
readUTF in interface DataInput
Specified by:
readUTF in interface ImageInputStream
Returns:
The String read
Throws:
EOFException - If end of file is reached before reading the String
UTFDataFormatException - If the data is not in UTF-8 format
IOException - If any other error occurs
See Also:
DataOutput.writeUTF(java.lang.String)

reset

public void reset()
           throws IOException
Specified by:
reset in interface ImageInputStream
Throws:
IOException

seek

public void seek(long position)
          throws IOException
Specified by:
seek in interface ImageInputStream
Throws:
IOException

setBitOffset

public void setBitOffset(int bitOffset)
                  throws IOException
Specified by:
setBitOffset in interface ImageInputStream
Throws:
IOException

setByteOrder

public void setByteOrder(ByteOrder byteOrder)
Specified by:
setByteOrder in interface ImageInputStream

skipBytes

public int skipBytes(int num)
              throws IOException
Description copied from interface: DataInput
This method skips and discards the specified number of bytes in an input stream. Note that this method may skip less than the requested number of bytes. The actual number of bytes skipped is returned. No bytes are skipped if a negative number is passed to this method.

Specified by:
skipBytes in interface DataInput
Specified by:
skipBytes in interface ImageInputStream
Parameters:
num - The number of bytes to skip
Returns:
The number of bytes actually skipped, which will always be numBytes
Throws:
EOFException - If end of file is reached before all bytes can be skipped
IOException - If any other error occurs

skipBytes

public long skipBytes(long num)
               throws IOException
Specified by:
skipBytes in interface ImageInputStream
Throws:
IOException