FileDocCategorySizeDatePackage
FileImageInputStream.javaAPI DocJava SE 6 API4529Tue Jun 10 00:26:10 BST 2008javax.imageio.stream

FileImageInputStream

public class FileImageInputStream extends ImageInputStreamImpl
An implementation of ImageInputStream that gets its input from a File or RandomAccessFile. The file contents are assumed to be stable during the lifetime of the object.
version
0.5

Fields Summary
private RandomAccessFile
raf
private final Object
disposerReferent
The referent to be registered with the Disposer.
private final CloseableDisposerRecord
disposerRecord
The DisposerRecord that closes the underlying RandomAccessFile.
Constructors Summary
public FileImageInputStream(File f)
Constructs a FileImageInputStream that will read from a given File.

The file contents must not change between the time this object is constructed and the time of the last call to a read method.

param
f a File to read from.
exception
IllegalArgumentException if f is null.
exception
SecurityException if a security manager exists and does not allow read access to the file.
exception
FileNotFoundException if f is a directory or cannot be opened for reading for any other reason.
exception
IOException if an I/O error occurs.

        this(f == null ? null : new RandomAccessFile(f, "r"));
    
public FileImageInputStream(RandomAccessFile raf)
Constructs a FileImageInputStream that will read from a given RandomAccessFile.

The file contents must not change between the time this object is constructed and the time of the last call to a read method.

param
raf a RandomAccessFile to read from.
exception
IllegalArgumentException if raf is null.

        if (raf == null) {
            throw new IllegalArgumentException("raf == null!");
        }
        this.raf = raf;

        disposerRecord = new CloseableDisposerRecord(raf);
        if (getClass() == FileImageInputStream.class) {
            disposerReferent = new Object();
            Disposer.addRecord(disposerReferent, disposerRecord);
        } else {
            disposerReferent = new StreamFinalizer(this);
        }
    
Methods Summary
public voidclose()

        super.close();
        disposerRecord.dispose(); // this closes the RandomAccessFile
        raf = null;
    
protected voidfinalize()
{@inheritDoc}

        // Empty finalizer: for performance reasons we instead use the
        // Disposer mechanism for ensuring that the underlying
        // RandomAccessFile is closed prior to garbage collection
    
public longlength()
Returns the length of the underlying file, or -1 if it is unknown.

return
the file length as a long, or -1.

        try {
            checkClosed();
            return raf.length();
        } catch (IOException e) {
            return -1L;
        }
    
public intread()

        checkClosed();
        bitOffset = 0;
        int val = raf.read();
        if (val != -1) {
            ++streamPos;
        }
        return val;
    
public intread(byte[] b, int off, int len)

        checkClosed();
        bitOffset = 0;
        int nbytes = raf.read(b, off, len);
        if (nbytes != -1) {
            streamPos += nbytes;
        }
        return nbytes;
    
public voidseek(long pos)

        checkClosed();
        if (pos < flushedPos) {
            throw new IndexOutOfBoundsException("pos < flushedPos!");
        }
        bitOffset = 0;
        raf.seek(pos);
        streamPos = raf.getFilePointer();