1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| public class OnDemandWriter extends FilterWriter {
private final StringBuilder builder = new StringBuilder();
public OnDemandWriter(Writer writer) {
super(writer);
}
/*
* On redéfini les méthodes write() pour écrire dans un buffer
* plutôt que dans le writer associé
*/
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
synchronized(this.lock) {
this.builder.append(cbuf, off, len);
}
}
@Override
public void write(int c) throws IOException {
synchronized(this.lock) {
this.builder.append((char)c);
}
}
@Override
public void write(String str, int off, int len) throws IOException {
synchronized(this.lock) {
this.builder.append(str, off, len);
}
}
/*
* On redéfini flush() pour qu'il écrive les données et force le flush()
*/
@Override
public void flush() throws IOException {
synchronized(this.lock) {
super.write(this.builder.toString());
this.builder.setLength(0);
super.flush();
}
}
/*
* On redéfini close() pour forcer un flush avant la fin
* (et ainsi éviter d'écrire des données)
*/
@Override
public void close() throws IOException {
this.flush();
super.close();
}
} |
Partager