Tôi đang cố gắng chặn System.out và System.err, nhưng vẫn duy trì khả năng ghi trực tiếp vào luồng gốc khi cần.Java: Ghi vào STDOUT thực sau System.setOut
PrintStream ps = System.out;
System.setOut(new MyMagicPrintStream());
ps.println("foo");
Thật không may, chi tiết về việc triển khai của lớp Hệ thống có nghĩa là trong ví dụ của tôi, "foo" được gửi tới bản in của MyMagicPrintStream của phần cứng thực. Có ai biết làm thế nào để có được tham chiếu đến OutputStreams thực/ban đầu.
Cảm ơn!
PS: Điều này sẽ dẫn đến kết quả là StackOverflowError < - dành cho SEO.
(Tôi không biết bạn có thể làm điều đó!) Tuy nhiên, có một vấn đề tiềm năng với cách tiếp cận này. Nếu một phần khác của ứng dụng của bạn đang sử dụng đối tượng System.out 'PrintStream' ban đầu, thì đầu ra thành stdout từ hai luồng có thể được xen kẽ ngẫu nhiên. Việc sử dụng một đối tượng luồng đơn sẽ ít bị ảnh hưởng hơn. –
Tôi nghĩ rằng nó sẽ không phải vì PrintStream không có bộ đệm nên dữ liệu nên trực tiếp đến stdout, phải không? – fqsxr
Tôi biết phải có một cách để có được bộ mô tả tập tin gốc. Đây là hoàn hảo. Cảm ơn! – Jim