Chỉ cần cuộn của riêng bạn. Không có ma thuật nào cả. Sử dụng Apache's TeeOutputStream về cơ bản bạn sẽ sử dụng mã bên dưới. Tất nhiên bằng cách sử dụng thư viện Apache Commons I/O, bạn có thể tận dụng các lớp khác, nhưng đôi khi nó là tốt đẹp để thực sự viết một cái gì đó cho chính mình. :)
public final class TeeOutputStream extends OutputStream {
private final OutputStream out;
private final OutputStream tee;
public TeeOutputStream(OutputStream out, OutputStream tee) {
if (out == null)
throw new NullPointerException();
else if (tee == null)
throw new NullPointerException();
this.out = out;
this.tee = tee;
}
@Override
public void write(int b) throws IOException {
out.write(b);
tee.write(b);
}
@Override
public void write(byte[] b) throws IOException {
out.write(b);
tee.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
tee.write(b, off, len);
}
@Override
public void flush() throws IOException {
out.flush();
tee.flush();
}
@Override
public void close() throws IOException {
out.close();
tee.close();
}
}
thử nghiệm với các lớp trên như sau
public static void main(String[] args) throws IOException {
TeeOutputStream out = new TeeOutputStream(System.out, System.out);
out.write("Hello world!".getBytes());
out.flush();
out.close();
}
sẽ in Hello World!Hello World!
.
(Lưu ý: ghi đè close()
có thể sử dụng một số dịch vụ chăm sóc tho' :)
Nguồn
2011-11-02 21:35:28
Không có gì trong I/O là không quan trọng. Ngay cả khi nó có vẻ như vậy lúc đầu tiên. –
Điều này không thực sự trả lời câu hỏi về cách viết cho tất cả chúng đồng thời. – Ataraxia
@ZettaSuro "viết phương thức ghi để lặp lại tất cả chúng, viết cho từng." Bạn có thực sự cần tôi để viết ra 'for' loop cho bạn? – Kevin