@ SuppressForbidden ( "legitimate sysstreams." ) private static void redirectStreams ( final Serializer serializer , final boolean flushFrequently ) { final PrintStream origSysOut = System . out ; final PrintStream origSysErr = System . err ; // Set warnings stream to System.err. warnings = System . err ; AccessController . doPrivileged ( new PrivilegedAction < Void > ( ) { @ SuppressForbidden ( "legitimate PrintStream with default charset." ) @ Override public Void run ( ) { System . setOut ( new PrintStream ( new BufferedOutputStream ( new ChunkedStream ( ) { @ Override public void write ( byte [ ] b , int off , int len ) throws IOException { if ( multiplexStdStreams ) { origSysOut . write ( b , off , len ) ; } serializer . serialize ( new AppendStdOutEvent ( b , off , len ) ) ; if ( flushFrequently ) serializer . flush ( ) ; } } ) ) ) ; System . setErr ( new PrintStream ( new BufferedOutputStream ( new ChunkedStream ( ) { @ Override public void write ( byte [ ] b , int off , int len ) throws IOException { if ( multiplexStdStreams ) { origSysErr . write ( b , off , len ) ; } serializer . serialize ( new AppendStdErrEvent ( b , off , len ) ) ; if ( flushFrequently ) serializer . flush ( ) ; } } ) ) ) ; return null ; } } ) ; }
Redirect standard streams so that the output can be passed to listeners .