3 import java.io.IOException;
5 /** Fixing the problem caused by mixing subclassing and delegation in
6 * the <code>java.io.BufferedWriter</code>
8 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
10 // BEGIN: writer.final.1.0
11 public final class Writer {
12 private final Impl impl;
14 private Writer(Impl impl) {
17 public final void write(int c) throws IOException {
18 char[] arr = { (char)c };
19 impl.write(arr, 0, 1);
22 public final void write(char cbuf[]) throws IOException {
23 impl.write(cbuf, 0, cbuf.length);
25 public final void write(char cbuf[], int off, int len)
27 impl.write(cbuf, off, len);
29 public final void write(String str) throws IOException {
30 impl.write(str, 0, str.length());
32 public final void write(String str, int off, int len)
34 impl.write(str, off, len);
36 public final void flush() throws IOException {
39 public final void close() throws IOException {
43 public static Writer create(Impl impl) {
44 return new Writer(impl);
47 public static Writer create(final java.io.Writer w) {
48 return new Writer(new Impl() {
49 public void write(String str, int off, int len)
51 w.write(str, off, len);
54 public void write(char[] arr, int off, int len)
56 w.write(arr, off, len);
59 public void close() throws IOException {
63 public void flush() throws IOException {
69 public static Writer createBuffered(final Writer out) {
70 return create(new SimpleBuffer(out));
74 public static interface Impl {
75 public void close() throws IOException;
76 public void flush() throws IOException;
77 public void write(String s, int off, int len) throws IOException;
78 public void write(char[] a, int off, int len) throws IOException;
81 // END: writer.final.1.0