1 | package dmg.util; |
2 | |
3 | import java.io.Writer; |
4 | |
5 | /** |
6 | * Buffered LineWriter adaptor implementing the Writer interface. |
7 | */ |
8 | public class BufferedLineWriter |
9 | extends Writer |
10 | { |
11 | private final LineWriter _writer; |
12 | private final StringBuilder _buffer; |
13 | |
14 | public BufferedLineWriter(LineWriter writer) |
15 | { |
16 | _writer = writer; |
17 | _buffer = new StringBuilder(); |
18 | } |
19 | |
20 | public void close() |
21 | { |
22 | flush(); |
23 | } |
24 | |
25 | private void flushCompletedLines() |
26 | { |
27 | int i; |
28 | while ((i = _buffer.indexOf("\n")) > -1) { |
29 | _writer.writeLine(_buffer.substring(0, i)); |
30 | _buffer.delete(0, i + 1); |
31 | } |
32 | } |
33 | |
34 | public void flush() |
35 | { |
36 | flushCompletedLines(); |
37 | if (_buffer.length() > 0) { |
38 | _writer.writeLine(_buffer.toString()); |
39 | _buffer.delete(0, _buffer.length()); |
40 | } |
41 | } |
42 | |
43 | public void write(char[] cbuf, int off, int len) |
44 | { |
45 | _buffer.append(cbuf, off, len); |
46 | flushCompletedLines(); |
47 | } |
48 | } |