org.apache.http.impl.io
public class: ContentLengthOutputStream [javadoc |
source]
java.lang.Object
java.io.OutputStream
org.apache.http.impl.io.ContentLengthOutputStream
All Implemented Interfaces:
Closeable, Flushable
Output stream that cuts off after a defined number of bytes. This class
is used to send content of HTTP messages where the end of the content entity
is determined by the value of the
Content-Length header.
Entities transferred using this stream can be maximum
Long#MAX_VALUE
long.
Note that this class NEVER closes the underlying stream, even when close
gets called. Instead, the stream will be marked as closed and no further
output will be permitted.
- version:
$ - Revision: 744526 $
- since:
4.0 -
| Constructor: |
public ContentLengthOutputStream(SessionOutputBuffer out,
long contentLength) {
super();
if (out == null) {
throw new IllegalArgumentException("Session output buffer may not be null");
}
if (contentLength < 0) {
throw new IllegalArgumentException("Content length may not be negative");
}
this.out = out;
this.contentLength = contentLength;
}
Wraps a session output buffer and cuts off output after a defined number
of bytes. Parameters:
out - The session output buffer
contentLength - The maximum number of bytes that can be written to
the stream. Subsequent write operations will be ignored.
- since:
4.0 -
|
| Methods from java.lang.Object: |
|---|
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from org.apache.http.impl.io.ContentLengthOutputStream Detail: |
public void close() throws IOException {
if (!this.closed) {
this.closed = true;
this.out.flush();
}
}
|
public void flush() throws IOException {
this.out.flush();
}
|
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
|
public void write(int b) throws IOException {
if (this.closed) {
throw new IOException("Attempted write to closed stream.");
}
if (this.total < this.contentLength) {
this.out.write(b);
this.total++;
}
}
|
public void write(byte[] b,
int off,
int len) throws IOException {
if (this.closed) {
throw new IOException("Attempted write to closed stream.");
}
if (this.total < this.contentLength) {
long max = this.contentLength - this.total;
if (len > max) {
len = (int) max;
}
this.out.write(b, off, len);
this.total += len;
}
}
|