The ImageInputStream interface unifies streaming and file-based
operations. An abstract base class, ImageInputStreamImpl is provided
to simplify writing a new ImageInputStream class. Concrete
implementation classes (FileImageInputStream,
FileCacheImageInputStream, and MemoryCacheImageInputStream)
are provided that allow input to come from a File or
InputStream with or without the use of a temporary cache file.
The ImageOutputStream interface performs an analogous function for
output. An abstract base class, ImageOutputStreamImpl is provided,
along with concrete implementation classes (FileImageOutputStream,
FileCacheImageOutputStream, and MemoryCacheImageOutputStream)
are provided that allow output to go to a File or
OutputStream with or without the use of a temporary cache file.
The IIOByteBuffer class provides an alternative way to perform reads
of sequences of bytes that reduces the amount of internal data copying.
An ImageInputStream or ImageOutputStream may internally allocate
system resources, such as a temporary cache file.
Clients are encouraged to use a try-with-resources statement to ensure the
ImageInputStream#close() or ImageOutputStream#close()
method is called which can promptly free those native resources.
Otherwise there is the possibility they will leak and eventually cause the
application to fail as well the possibility that not all data is flushed
to the underlying output stream. A logical consequence of that is that
this should be done before closing the destination java..
A simple pattern would be
try (FileOutputStream fos = new FileOutputStream("out.jpg"); ImageOutputStream ios = new FileCacheImageOutputStream(fos, null)) { ImageIO.write(img, "jpg", ios); } catch (IOException e) { } // implicit finally block closes the streams in the reverse order to opening
Sub-classers of these Image I/O API stream types can, to a limited extent, protect
the application from the consequences of failures to close by adopting mechanisms
such as java. to free internal resources when it
is no longer reachable. This is only necessary if there are any resources to release.
However applications cannot rely on this, either for resource management, or
for program correctness.
| Modifier and Type | Interface and Description |
|---|---|
| public interface | ImageInputStream
A seekable input stream interface for use by
|
| public interface | ImageOutputStream
A seekable output stream interface for use by
|
| Modifier and Type | Class and Description |
|---|---|
| public class | FileCacheImageInputStream
An implementation of |
| public class | FileCacheImageOutputStream
An implementation of |
| public class | FileImageInputStream
An implementation of |
| public class | FileImageOutputStream
An implementation of |
| public class | IIOByteBuffer
A class representing a mutable reference to an array of bytes and an offset and length within that array. |
| public abstract class | ImageInputStreamImpl
An abstract class implementing the |
| public abstract class | ImageOutputStreamImpl
An abstract class implementing the |
| pack-priv class | MemoryCache
Package-visible class consolidating common code for
|
| public class | MemoryCacheImageInputStream
An implementation of |
| public class | MemoryCacheImageOutputStream
An implementation of |