Java Reference
In-Depth Information
D ECORATOR classes typically implement their operations by relying on the decorator object
they receive in their constructors. For example, the GZIPOutputStream class implements
its write() operations by compressing the bytes it receives and then writing them to the
OutputStream object that its constructor requires. In other words, the
GZIPOutputStream class adds the behavior of compression to the OutputStream object
it receives. This is typical of the intent of D ECORATOR .
Requiring an OutputStream object in each OutputStream constructor is a recursive idea.
Like C OMPOSITE , the D ECORATOR pattern requires some classes in a hierarchy to act as leaf
nodes. For example, you can instantiate the FileOutputStream class without already
having an OutputStream object.
Most of Java's stream classes are part of the java.io package, but the
DeflaterOutputStream , GZIPOutputStream , and ZipOutputStream classes that
Figure 27.1 shows are part of the package java.util.zip . The ZipOutputStream class
lets you create a compressed file with multiple entries, whereas the GZIPOutputStream
class compresses a single input file. Which of these classes you choose depends on how you
want to "decorate" the output. For example, you can wrap a GZIPOutputStream object
around a FileOutputStream object to create a zipped version of an existing file:
package com.oozinoz.applications;
import java.io.*;
import java.util.zip.*;
public class ShowGzip
{
public static void main(String args[])
throws IOException
{
String fileName = "demo.doc";
java.net.URL url =
ClassLoader.getSystemResource(fileName);
InputStream in = url.openStream();
GZIPOutputStream out =
new GZIPOutputStream(
new FileOutputStream(
url.getFile() + ".gz"));
byte[] data = new byte[100];
while (true)
{
int n = in.read(data);
if (n == -1)
{
break;
}
out.write(data, 0, n);
}
out.close();
in.close();
}
}
Search WWH ::




Custom Search