You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2005/12/08 22:56:07 UTC
svn commit: r355232 -
/jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java
Author: olegk
Date: Thu Dec 8 13:56:02 2005
New Revision: 355232
URL: http://svn.apache.org/viewcvs?rev=355232&view=rev
Log:
Changed to employ ByteArrayBuffer as an internal buffer
Modified:
jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java
Modified: jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java
URL: http://svn.apache.org/viewcvs/jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java?rev=355232&r1=355231&r2=355232&view=diff
==============================================================================
--- jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java (original)
+++ jakarta/httpcomponents/trunk/http-core/src/java/org/apache/http/impl/io/AbstractHttpDataTransmitter.java Thu Dec 8 13:56:02 2005
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.OutputStream;
+import org.apache.http.io.ByteArrayBuffer;
import org.apache.http.io.CharArrayBuffer;
import org.apache.http.io.HttpDataTransmitter;
import org.apache.http.params.HttpParams;
@@ -50,8 +51,8 @@
private static final byte[] CRLF = new byte[] {CR, LF};
private OutputStream outstream;
- private byte[] buffer;
- private int bufferlen;
+ private ByteArrayBuffer buffer;
+ private int maxSize;
private String charset = "US-ASCII";
@@ -63,14 +64,14 @@
throw new IllegalArgumentException("Buffer size may not be negative or zero");
}
this.outstream = outstream;
- this.buffer = new byte[buffersize];
- this.bufferlen = 0;
+ this.buffer = new ByteArrayBuffer(buffersize);
+ this.maxSize = buffersize;
}
protected void flushBuffer() throws IOException {
- if (this.bufferlen > 0) {
- this.outstream.write(this.buffer, 0, this.bufferlen);
- this.bufferlen = 0;
+ if (this.buffer.length() > 0) {
+ this.outstream.write(this.buffer.buffer(), 0, this.buffer.length());
+ this.buffer.clear();
}
}
@@ -83,19 +84,18 @@
if (b == null) {
return;
}
- int freecapacity = this.buffer.length - this.bufferlen;
- if (len > freecapacity) {
+ int freecapacity = this.buffer.capacity() - this.buffer.length();
+ if (len > freecapacity || this.buffer.length() >= this.maxSize) {
// flush the buffer
flushBuffer();
- freecapacity = this.buffer.length;
+ freecapacity = this.buffer.capacity();
}
- if (len > freecapacity) {
+ if (len > freecapacity || len > this.maxSize) {
// still does not fit, write directly to the out stream
this.outstream.write(b, off, len);
} else {
// buffer
- System.arraycopy(b, off, this.buffer, this.bufferlen, len);
- this.bufferlen += len;
+ this.buffer.append(b, off, len);
}
}
@@ -107,10 +107,10 @@
}
public void write(int b) throws IOException {
- if (this.bufferlen == this.buffer.length) {
+ if (this.buffer.length() == this.buffer.capacity()) {
flushBuffer();
}
- this.buffer[this.bufferlen++] = (byte)b;
+ this.buffer.append(b);
}
public void writeLine(final String s) throws IOException {