OutputStreamTesterTest.java revision cb318c6f4fe5b0e20099fa85f1b95ccb2d24119f
1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpackage tests.api.java.io;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestSuite;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport org.apache.harmony.testframework.SinkTester;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport org.apache.harmony.testframework.WrapperTester;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport tests.support.Streams;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.BufferedOutputStream;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream;
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.DataOutputStream;
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.File;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileInputStream;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileOutputStream;
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FilterOutputStream;
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectInputStream;
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ObjectOutputStream;
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.OutputStream;
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedInputStream;
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedOutputStream;
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PrintStream;
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Callable;
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.ExecutorService;
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Executors;
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.concurrent.Future;
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/**
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Tests basic {@link OutputStream} behaviors for the luni implementations of
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the type.
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class OutputStreamTesterTest {
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public static junit.framework.Test suite() {
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        TestSuite suite = new TestSuite();
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // sink tests
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new FileOutputStreamSinkTester(true).createTests());
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new FileOutputStreamSinkTester(false).createTests());
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new ByteArrayOutputStreamSinkTester(0).setThrowsExceptions(false).createTests());
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new ByteArrayOutputStreamSinkTester(4).setThrowsExceptions(false).createTests());
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new PipedOutputStreamSinkTester().createTests());
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // wrapper tests
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new BufferedOutputStreamTester(1).createTests());
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new BufferedOutputStreamTester(5).createTests());
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new BufferedOutputStreamTester(1024).createTests());
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new FilterOutputStreamTester().createTests());
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new DataOutputStreamTester().createTests());
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // fails wrapperTestFlushThrowsViaClose() and sinkTestWriteAfterClose():
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // suite.addTest(new ObjectOutputStreamTester().createTests());
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        suite.addTest(new PrintStreamTester().setThrowsExceptions(false).createTests());
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return suite;
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class FileOutputStreamSinkTester extends SinkTester {
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private final boolean append;
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private File file;
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private FileOutputStreamSinkTester(boolean append) {
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.append = append;
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create() throws IOException {
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            file = File.createTempFile("FileOutputStreamSinkTester", "tmp");
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            file.deleteOnExit();
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new FileOutputStream(file, append);
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] getBytes() throws IOException {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return Streams.streamToBytes(new FileInputStream(file));
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class ByteArrayOutputStreamSinkTester extends SinkTester {
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private final int size;
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private ByteArrayOutputStream stream;
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private ByteArrayOutputStreamSinkTester(int size) {
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.size = size;
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create() throws IOException {
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            stream = new ByteArrayOutputStream(size);
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return stream;
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] getBytes() throws IOException {
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return stream.toByteArray();
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class PipedOutputStreamSinkTester extends SinkTester {
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private ExecutorService executor;
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private Future<byte[]> future;
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create() throws IOException {
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final PipedInputStream in = new PipedInputStream();
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            PipedOutputStream out = new PipedOutputStream(in);
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            executor = Executors.newSingleThreadExecutor();
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            future = executor.submit(new Callable<byte[]>() {
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                public byte[] call() throws Exception {
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    byte[] buffer = new byte[256];
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    int count;
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    while ((count = in.read(buffer)) != -1) {
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        bytes.write(buffer, 0, count);
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    return bytes.toByteArray();
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            });
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return out;
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] getBytes() throws Exception {
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            executor.shutdown();
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return future.get();
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class FilterOutputStreamTester extends WrapperTester {
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create(OutputStream delegate) throws Exception {
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new FilterOutputStream(delegate);
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] decode(byte[] delegateBytes) throws Exception {
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return delegateBytes;
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class BufferedOutputStreamTester extends WrapperTester {
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private final int bufferSize;
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private BufferedOutputStreamTester(int bufferSize) {
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.bufferSize = bufferSize;
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create(OutputStream delegate) throws Exception {
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new BufferedOutputStream(delegate, bufferSize);
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] decode(byte[] delegateBytes) throws Exception {
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return delegateBytes;
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class DataOutputStreamTester extends WrapperTester {
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create(OutputStream delegate) throws Exception {
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new DataOutputStream(delegate);
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] decode(byte[] delegateBytes) throws Exception {
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return delegateBytes;
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class ObjectOutputStreamTester extends WrapperTester {
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create(OutputStream delegate) throws Exception {
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new ObjectOutputStream(delegate);
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] decode(byte[] delegateBytes) throws Exception {
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return Streams.streamToBytes(new ObjectInputStream(
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    new ByteArrayInputStream(delegateBytes)));
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static class PrintStreamTester extends WrapperTester {
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public OutputStream create(OutputStream delegate) throws Exception {
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return new PrintStream(delegate);
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public byte[] decode(byte[] delegateBytes) throws Exception {
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return delegateBytes;
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
206