com.sun.media.imageio.stream
Class FileChannelImageInputStream

java.lang.Object
  |
  +--javax.imageio.stream.ImageInputStreamImpl
        |
        +--com.sun.media.imageio.stream.FileChannelImageInputStream
All Implemented Interfaces:
DataInput, ImageInputStream

public class FileChannelImageInputStream
extends ImageInputStreamImpl

A class which implements ImageInputStream using a FileChannel as the eventual data source. The channel contents are assumed to be stable during the lifetime of the object.

Memory mapping and new I/O view Buffers are used to read the data. Only methods which provide significant performance improvement with respect to the superclass implementation are overridden. Overridden methods are not commented individually unless some noteworthy aspect of the implementation must be described.

The methods of this class are not synchronized.

See Also:
ImageInputStream, java.nio, FileChannel

Field Summary
 
Fields inherited from class javax.imageio.stream.ImageInputStreamImpl
bitOffset, byteOrder, flushedPos, streamPos
 
Constructor Summary
FileChannelImageInputStream(FileChannel channel)
          Constructs a FileChannelImageInputStream from a FileChannel.
 
Method Summary
 void close()
          Invokes the superclass method and sets the internal reference to the source FileChannel to null.
 long length()
          Returns the number of bytes currently in the FileChannel.
 int read()
           
 int read(byte[] b, int off, int len)
           
 void readFully(char[] c, int off, int len)
           
 void readFully(double[] d, int off, int len)
           
 void readFully(float[] f, int off, int len)
           
 void readFully(int[] i, int off, int len)
           
 void readFully(long[] l, int off, int len)
           
 void readFully(short[] s, int off, int len)
           
 void seek(long pos)
          Invokes the superclass method and sets the position within the memory mapped buffer.
 void setByteOrder(ByteOrder networkByteOrder)
           
 
Methods inherited from class javax.imageio.stream.ImageInputStreamImpl
checkClosed, finalize, flush, flushBefore, getBitOffset, getByteOrder, getFlushedPosition, getStreamPosition, isCached, isCachedFile, isCachedMemory, mark, read, readBit, readBits, readBoolean, readByte, readBytes, readChar, readDouble, readFloat, readFully, readFully, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedInt, readUnsignedShort, readUTF, reset, setBitOffset, skipBytes, skipBytes
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileChannelImageInputStream

public FileChannelImageInputStream(FileChannel channel)
                            throws IOException
Constructs a FileChannelImageInputStream from a FileChannel. The initial position of the stream stream is taken to be the position of the FileChannel parameter when this constructor is invoked. The stream and flushed positions are therefore both initialized to channel.position().

Parameters:
channel - the source FileChannel.
Throws:
IllegalArgumentException - if channel is null or is not open.
IOException - if a method invoked on channel throws an IOException.
Method Detail

read

public int read()
         throws IOException
Specified by:
read in interface ImageInputStream
Specified by:
read in class ImageInputStreamImpl
IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
Specified by:
read in interface ImageInputStream
Specified by:
read in class ImageInputStreamImpl
IOException

close

public void close()
           throws IOException
Invokes the superclass method and sets the internal reference to the source FileChannel to null. The source FileChannel is not closed.

Specified by:
close in interface ImageInputStream
Overrides:
close in class ImageInputStreamImpl
Throws:
IOException - if an error occurs.

readFully

public void readFully(char[] c,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

readFully

public void readFully(short[] s,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

readFully

public void readFully(int[] i,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

readFully

public void readFully(long[] l,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

readFully

public void readFully(float[] f,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

readFully

public void readFully(double[] d,
                      int off,
                      int len)
               throws IOException
Specified by:
readFully in interface ImageInputStream
Overrides:
readFully in class ImageInputStreamImpl
IOException

length

public long length()
Returns the number of bytes currently in the FileChannel. If an IOException is encountered when querying the channel's size, -1L will be returned.

Specified by:
length in interface ImageInputStream
Overrides:
length in class ImageInputStreamImpl
Returns:
The number of bytes in the channel -1L to indicate unknown length.

seek

public void seek(long pos)
          throws IOException
Invokes the superclass method and sets the position within the memory mapped buffer. A new region is mapped if necessary. The position of the source FileChannel is not changed, i.e., FileChannel.position(long) is not invoked.

Specified by:
seek in interface ImageInputStream
Overrides:
seek in class ImageInputStreamImpl
IOException

setByteOrder

public void setByteOrder(ByteOrder networkByteOrder)
Specified by:
setByteOrder in interface ImageInputStream
Overrides:
setByteOrder in class ImageInputStreamImpl