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

FileImageOutputStream

public class FileImageOutputStream extends ImageOutputStreamImpl
An implementation of ImageOutputStream that writes its output directly to a File or RandomAccessFile.
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 FileImageOutputStream(File f)
Constructs a FileImageOutputStream that will write to a given File.

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

        this(f == null ? null : new RandomAccessFile(f, "rw"));
    
public FileImageOutputStream(RandomAccessFile raf)
Constructs a FileImageOutputStream that will write to a given RandomAccessFile.

param
raf a RandomAccessFile to write to.
exception
IllegalArgumentException if raf is null.

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

        disposerRecord = new CloseableDisposerRecord(raf);
        if (getClass() == FileImageOutputStream.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()

        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)
Sets the current stream position and resets the bit offset to 0. It is legal to seeking past the end of the file; an EOFException will be thrown only if a read is performed. The file length will not be increased until a write is performed.

exception
IndexOutOfBoundsException if pos is smaller than the flushed position.
exception
IOException if any other I/O error occurs.

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

        flushBits(); // this will call checkClosed() for us
        raf.write(b);
        ++streamPos;
    
public voidwrite(byte[] b, int off, int len)

        flushBits(); // this will call checkClosed() for us
        raf.write(b, off, len);
        streamPos += len;