View Javadoc

1   // ========================================================================
2   // Copyright 1999-2005 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // Licensed under the Apache License, Version 2.0 (the "License");
5   // you may not use this file except in compliance with the License.
6   // You may obtain a copy of the License at 
7   // http://www.apache.org/licenses/LICENSE-2.0
8   // Unless required by applicable law or agreed to in writing, software
9   // distributed under the License is distributed on an "AS IS" BASIS,
10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  // See the License for the specific language governing permissions and
12  // limitations under the License.
13  // ========================================================================
14  
15  package org.mortbay.io;
16  
17  import java.io.IOException;
18  import java.io.OutputStream;
19  import java.io.Writer;
20  
21  
22  /* ------------------------------------------------------------ */
23  /** Wrap a Writer as an OutputStream.
24   * When all you have is a Writer and only an OutputStream will do.
25   * Try not to use this as it indicates that your design is a dogs
26   * breakfast (JSP made me write it).
27   * @author Greg Wilkins (gregw)
28   */
29  public class WriterOutputStream extends OutputStream
30  {
31      protected Writer _writer;
32      protected String _encoding;
33      private byte[] _buf=new byte[1];
34      
35      /* ------------------------------------------------------------ */
36      public WriterOutputStream(Writer writer, String encoding)
37      {
38          _writer=writer;
39          _encoding=encoding;
40      }
41      
42      /* ------------------------------------------------------------ */
43      public WriterOutputStream(Writer writer)
44      {
45          _writer=writer;
46      }
47  
48      /* ------------------------------------------------------------ */
49      public void close()
50          throws IOException
51      {
52          _writer.close();
53          _writer=null;
54          _encoding=null;
55      }
56      
57      /* ------------------------------------------------------------ */
58      public void flush()
59          throws IOException
60      {
61          _writer.flush();
62      }
63      
64      /* ------------------------------------------------------------ */
65      public void write(byte[] b) 
66          throws IOException
67      {
68          if (_encoding==null)
69              _writer.write(new String(b));
70          else
71              _writer.write(new String(b,_encoding));
72      }
73      
74      /* ------------------------------------------------------------ */
75      public void write(byte[] b, int off, int len)
76          throws IOException
77      {
78          if (_encoding==null)
79              _writer.write(new String(b,off,len));
80          else
81              _writer.write(new String(b,off,len,_encoding));
82      }
83      
84      /* ------------------------------------------------------------ */
85      public synchronized void write(int b)
86          throws IOException
87      {
88          _buf[0]=(byte)b;
89          write(_buf);
90      }
91  }
92