14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.util.io; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.io.IOException; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.io.OutputStream; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 6d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 7d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root/** 8d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * An output stream which copies anything written into it to another stream. 9d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root */ 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class TeeOutputStream 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends OutputStream 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private OutputStream output1; 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private OutputStream output2; 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 16d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root /** 17d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * Base constructor. 18d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * 19d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * @param output1 the output stream that is wrapped. 20d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * @param output2 a secondary stream that anything written to output1 is also written to. 21d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root */ 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public TeeOutputStream(OutputStream output1, OutputStream output2) 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1 = output1; 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2 = output2; 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void write(byte[] buf) 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws IOException 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1.write(buf); 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2.write(buf); 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void write(byte[] buf, int off, int len) 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws IOException 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1.write(buf, off, len); 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2.write(buf, off, len); 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void write(int b) 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws IOException 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1.write(b); 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2.write(b); 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void flush() 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws IOException 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1.flush(); 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2.flush(); 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void close() 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws IOException 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output1.close(); 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.output2.close(); 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom}