IdentityOutputStream.java revision 417f3b92ba4549b2f22340e3107d869d2b9c5bb8
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/io/IdentityOutputStream.java $ 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * $Revision: 560343 $ 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * $Date: 2007-07-27 11:18:19 -0700 (Fri, 27 Jul 2007) $ 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * ==================================================================== 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Licensed to the Apache Software Foundation (ASF) under one 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * or more contributor license agreements. See the NOTICE file 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * distributed with this work for additional information 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * regarding copyright ownership. The ASF licenses this file 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * to you under the Apache License, Version 2.0 (the 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * "License"); you may not use this file except in compliance 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * with the License. You may obtain a copy of the License at 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * software distributed under the License is distributed on an 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * KIND, either express or implied. See the License for the 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * specific language governing permissions and limitations 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * under the License. 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * ==================================================================== 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This software consists of voluntary contributions made by many 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * individuals on behalf of the Apache Software Foundation. For more 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * information on the Apache Software Foundation, please see 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * <http://www.apache.org/>. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)package org.apache.http.impl.io; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import java.io.IOException; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import java.io.OutputStream; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.apache.http.io.SessionOutputBuffer; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * A stream for writing with an "identity" transport encoding. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @version $Revision: 560343 $ 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @since 4.0 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)public class IdentityOutputStream extends OutputStream { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Wrapped session output buffer. 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private final SessionOutputBuffer out; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** True if the stream is closed. */ 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private boolean closed = false; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public IdentityOutputStream(final SessionOutputBuffer out) { 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) super(); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (out == null) { 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) throw new IllegalArgumentException("Session output buffer may not be null"); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.out = out; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * <p>Does not close the underlying socket output.</p> 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @throws IOException If an I/O problem occurs. 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void close() throws IOException { 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!this.closed) { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.closed = true; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.out.flush(); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void flush() throws IOException { 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.out.flush(); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void write(byte[] b, int off, int len) throws IOException { 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.closed) { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) throw new IOException("Attempted write to closed stream."); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.out.write(b, off, len); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void write(byte[] b) throws IOException { 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) write(b, 0, b.length); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void write(int b) throws IOException { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.closed) { 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) throw new IOException("Attempted write to closed stream."); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.out.write(b); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)