1 /* 2 * $HeadURL: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpcore/tags/4.0-alpha2/src/java/org/apache/http/io/IdentityOutputStream.java $ 3 * $Revision: 390883 $ 4 * $Date: 2006-04-02 20:39:50 +0200 (Sun, 02 Apr 2006) $ 5 * 6 * ==================================================================== 7 * 8 * Copyright 1999-2006 The Apache Software Foundation 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 * ==================================================================== 22 * 23 * This software consists of voluntary contributions made by many 24 * individuals on behalf of the Apache Software Foundation. For more 25 * information on the Apache Software Foundation, please see 26 * <http://www.apache.org/>. 27 * 28 */ 29 30 package org.apache.http.io; 31 32 import java.io.IOException; 33 import java.io.OutputStream; 34 35 /** 36 * A stream for writing with an "identity" transport encoding. 37 * 38 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> 39 * 40 * @version $Revision: 390883 $ 41 * 42 * @since 4.0 43 */ 44 public class IdentityOutputStream extends OutputStream { 45 46 /** 47 * Wrapped data transmitter that all calls are delegated to. 48 */ 49 private final HttpDataTransmitter out; 50 51 /** True if the stream is closed. */ 52 private boolean closed = false; 53 54 public IdentityOutputStream(final HttpDataTransmitter out) { 55 super(); 56 if (out == null) { 57 throw new IllegalArgumentException("HTTP data transmitter may not be null"); 58 } 59 this.out = out; 60 } 61 62 /** 63 * <p>Does not close the underlying socket output.</p> 64 * 65 * @throws IOException If an I/O problem occurs. 66 */ 67 public void close() throws IOException { 68 if (!this.closed) { 69 this.closed = true; 70 this.out.flush(); 71 } 72 } 73 74 public void flush() throws IOException { 75 this.out.flush(); 76 } 77 78 public void write(byte[] b, int off, int len) throws IOException { 79 if (this.closed) { 80 throw new IOException("Attempted write to closed stream."); 81 } 82 this.out.write(b, off, len); 83 } 84 85 public void write(byte[] b) throws IOException { 86 write(b, 0, b.length); 87 } 88 89 public void write(int b) throws IOException { 90 if (this.closed) { 91 throw new IOException("Attempted write to closed stream."); 92 } 93 this.out.write(b); 94 } 95 96 }