FileDocCategorySizeDatePackage
FileCacheImageInputStream.javaAPI DocAndroid 1.5 API3600Wed May 06 22:41:54 BST 2009javax.imageio.stream

FileCacheImageInputStream

public class FileCacheImageInputStream extends ImageInputStreamImpl
The FileCacheImageInputStream class is an implementation of ImageInputStream which reads from its InputStream and uses a temporary file as a cache.
since
Android 1.0

Fields Summary
private InputStream
is
The is.
private File
file
The file.
private RandomAccessFile
raf
The raf.
Constructors Summary
public FileCacheImageInputStream(InputStream stream, File cacheDir)
Instantiates a new FileCacheImageInputStream from the specified InputStream and using the specified File as its cache directory.

param
stream the InputStream for reading.
param
cacheDir the cache directory where the cache file will be created.
throws
IOException if an I/O exception has occurred.

        if (stream == null) {
            throw new IllegalArgumentException("stream == null!");
        }
        is = stream;

        if (cacheDir == null || cacheDir.isDirectory()) {
            file = File.createTempFile(FileCacheImageOutputStream.IIO_TEMP_FILE_PREFIX, null,
                    cacheDir);
            file.deleteOnExit();
        } else {
            throw new IllegalArgumentException("Not a directory!");
        }

        raf = new RandomAccessFile(file, "rw");
    
Methods Summary
public voidclose()

        super.close();
        raf.close();
        file.delete();
    
public booleanisCached()

        return true;
    
public booleanisCachedFile()

        return true;
    
public booleanisCachedMemory()

        return false;
    
public intread()

        bitOffset = 0;

        if (streamPos >= raf.length()) {
            int b = is.read();

            if (b < 0) {
                return -1;
            }

            raf.seek(streamPos++);
            raf.write(b);
            return b;
        }

        raf.seek(streamPos++);
        return raf.read();
    
public intread(byte[] b, int off, int len)

        bitOffset = 0;

        if (streamPos >= raf.length()) {
            int nBytes = is.read(b, off, len);

            if (nBytes < 0) {
                return -1;
            }

            raf.seek(streamPos);
            raf.write(b, off, nBytes);
            streamPos += nBytes;
            return nBytes;
        }

        raf.seek(streamPos);
        int nBytes = raf.read(b, off, len);
        streamPos += nBytes;
        return nBytes;