1 // ========================================================================
2 // Copyright (c) 1999-2009 Mort Bay Consulting Pty. Ltd.
3 // ------------------------------------------------------------------------
4 // All rights reserved. This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v1.0
6 // and Apache License v2.0 which accompanies this distribution.
7 // The Eclipse Public License is available at
8 // http://www.eclipse.org/legal/epl-v10.html
9 // The Apache License v2.0 is available at
10 // http://www.opensource.org/licenses/apache2.0.php
11 // You may elect to redistribute this code under either of these licenses.
12 // ========================================================================
13
14 package org.eclipse.jetty.io;
15
16 import java.io.IOException;
17 import java.io.OutputStream;
18 import java.io.Writer;
19
20
21 /* ------------------------------------------------------------ */
22 /** Wrap a Writer as an OutputStream.
23 * When all you have is a Writer and only an OutputStream will do.
24 * Try not to use this as it indicates that your design is a dogs
25 * breakfast (JSP made me write it).
26 *
27 */
28 public class WriterOutputStream extends OutputStream
29 {
30 protected final Writer _writer;
31 protected final String _encoding;
32 private final byte[] _buf=new byte[1];
33
34 /* ------------------------------------------------------------ */
35 public WriterOutputStream(Writer writer, String encoding)
36 {
37 _writer=writer;
38 _encoding=encoding;
39 }
40
41 /* ------------------------------------------------------------ */
42 public WriterOutputStream(Writer writer)
43 {
44 _writer=writer;
45 _encoding=null;
46 }
47
48 /* ------------------------------------------------------------ */
49 @Override
50 public void close()
51 throws IOException
52 {
53 _writer.close();
54 }
55
56 /* ------------------------------------------------------------ */
57 @Override
58 public void flush()
59 throws IOException
60 {
61 _writer.flush();
62 }
63
64 /* ------------------------------------------------------------ */
65 @Override
66 public void write(byte[] b)
67 throws IOException
68 {
69 if (_encoding==null)
70 _writer.write(new String(b));
71 else
72 _writer.write(new String(b,_encoding));
73 }
74
75 /* ------------------------------------------------------------ */
76 @Override
77 public void write(byte[] b, int off, int len)
78 throws IOException
79 {
80 if (_encoding==null)
81 _writer.write(new String(b,off,len));
82 else
83 _writer.write(new String(b,off,len,_encoding));
84 }
85
86 /* ------------------------------------------------------------ */
87 @Override
88 public synchronized void write(int b)
89 throws IOException
90 {
91 _buf[0]=(byte)b;
92 write(_buf);
93 }
94 }
95