You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2003/01/05 12:22:16 UTC
cvs commit: jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf ByteChunk.java CharChunk.java
remm 2003/01/05 03:22:16
Modified: util/java/org/apache/tomcat/util/buf ByteChunk.java
CharChunk.java
Log:
- Add input support to ByteChunk and CharChunk.
- I don't know if the new method names are well chosen.
Revision Changes Path
1.12 +65 -8 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/ByteChunk.java
Index: ByteChunk.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/ByteChunk.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ByteChunk.java 23 Apr 2002 20:07:57 -0000 1.11
+++ ByteChunk.java 5 Jan 2003 11:22:16 -0000 1.12
@@ -85,18 +85,31 @@
*
* The buffer can be modified and used for both input and output.
*
- * @author dac@eng.sun.com
- * @author James Todd [gonzo@eng.sun.com]
+ * @author dac@sun.com
+ * @author James Todd [gonzo@sun.com]
* @author Costin Manolache
+ * @author Remy Maucherat
*/
public final class ByteChunk implements Cloneable, Serializable {
+
+ // Input interface, used when the buffer is emptied.
+ public static interface ByteInputChannel {
+ /**
+ * Read new bytes ( usually the internal conversion buffer ).
+ * The implementation is allowed to ignore the parameters,
+ * and mutate the chunk if it wishes to implement its own buffering.
+ */
+ public int realReadBytes(byte cbuf[], int off, int len)
+ throws IOException;
+ }
// Output interface, used when the buffer is filled.
public static interface ByteOutputChannel {
- /** Send the bytes ( usually the internal conversion buffer ).
- * Expect 8k output if the buffer is full.
- */
- public void realWriteBytes( byte cbuf[], int off, int len)
- throws IOException;
+ /**
+ * Send the bytes ( usually the internal conversion buffer ).
+ * Expect 8k output if the buffer is full.
+ */
+ public void realWriteBytes(byte cbuf[], int off, int len)
+ throws IOException;
}
// --------------------
@@ -120,7 +133,8 @@
// How much can it grow, when data is added
private int limit=-1;
- private ByteOutputChannel out=null;
+ private ByteInputChannel in = null;
+ private ByteOutputChannel out = null;
private boolean isOutput=false;
@@ -247,6 +261,13 @@
return limit;
}
+ /**
+ * When the buffer is empty, read the data from the input channel.
+ */
+ public void setByteInputChannel(ByteInputChannel in) {
+ this.in = in;
+ }
+
/** When the buffer is full, write the data to the output channel.
* Also used when large amount of data is appended.
*
@@ -348,6 +369,42 @@
out.realWriteBytes( src, off, len );
}
}
+
+
+ // -------------------- Removing data from the buffer --------------------
+
+ public int substract()
+ throws IOException {
+
+ if ((end - start) == 0) {
+ int n = in.realReadBytes( buff, 0, buff.length );
+ if (n < 0)
+ return -1;
+ }
+
+ return (buff[start++] & 0xFF);
+
+ }
+
+ public int substract( byte src[], int off, int len )
+ throws IOException {
+
+ if ((end - start) == 0) {
+ int n = in.realReadBytes( buff, 0, buff.length );
+ if (n < 0)
+ return -1;
+ }
+
+ int n = len;
+ if (len > getLength()) {
+ n = getLength();
+ }
+ System.arraycopy(buff, start, src, off, n);
+ start += n;
+ return n;
+
+ }
+
public void flushBuffer()
throws IOException
1.5 +60 -5 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/CharChunk.java
Index: CharChunk.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/CharChunk.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CharChunk.java 16 Mar 2002 06:49:15 -0000 1.4
+++ CharChunk.java 5 Jan 2003 11:22:16 -0000 1.5
@@ -70,11 +70,23 @@
* it is known to not be the most efficient solution - Strings are
* designed as imutable and secure objects.
*
- * @author dac@eng.sun.com
- * @author James Todd [gonzo@eng.sun.com]
+ * @author dac@sun.com
+ * @author James Todd [gonzo@sun.com]
* @author Costin Manolache
+ * @author Remy Maucherat
*/
public final class CharChunk implements Cloneable, Serializable {
+
+ // Input interface, used when the buffer is emptied.
+ public static interface CharInputChannel {
+ /**
+ * Read new bytes ( usually the internal conversion buffer ).
+ * The implementation is allowed to ignore the parameters,
+ * and mutate the chunk if it wishes to implement its own buffering.
+ */
+ public int realReadChars(char cbuf[], int off, int len)
+ throws IOException;
+ }
/**
* When we need more space we'll either
* grow the buffer ( up to the limit ) or send it to a channel.
@@ -83,8 +95,8 @@
/** Send the bytes ( usually the internal conversion buffer ).
* Expect 8k output if the buffer is full.
*/
- public void realWriteChars( char cbuf[], int off, int len)
- throws IOException;
+ public void realWriteChars(char cbuf[], int off, int len)
+ throws IOException;
}
// --------------------
@@ -102,7 +114,8 @@
// maximum amount to be cached
private int limit=-1;
- CharOutputChannel out=null;
+ private CharInputChannel in = null;
+ private CharOutputChannel out = null;
/**
* Creates a new, uninitialized CharChunk object.
@@ -182,6 +195,13 @@
return limit;
}
+ /**
+ * When the buffer is empty, read the data from the input channel.
+ */
+ public void setCharInputChannel(CharInputChannel in) {
+ this.in = in;
+ }
+
/** When the buffer is full, write the data to the output channel.
* Also used when large amount of data is appended.
*
@@ -377,6 +397,41 @@
}
}
+ // -------------------- Removing data from the buffer --------------------
+
+ public int substract()
+ throws IOException {
+
+ if ((end - start) == 0) {
+ int n = in.realReadChars(buff, 0, buff.length);
+ if (n < 0)
+ return -1;
+ }
+
+ return (buff[start++]);
+
+ }
+
+ public int substract( char src[], int off, int len )
+ throws IOException {
+
+ if ((end - start) == 0) {
+ int n = in.realReadChars( buff, 0, buff.length );
+ if (n < 0)
+ return -1;
+ }
+
+ int n = len;
+ if (len > getLength()) {
+ n = getLength();
+ }
+ System.arraycopy(buff, start, src, off, n);
+ start += n;
+ return n;
+
+ }
+
+
public void flushBuffer()
throws IOException
{
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>