Author: violetagg
Date: Thu Oct  6 07:58:47 2016
New Revision: 1763511

URL: http://svn.apache.org/viewvc?rev=1763511&view=rev
Log:
Use ByteBuffer instead of ByteChunk. This is in a preparation for removing 
o.a.coyote.InputBuffer.doRead(ByteChunk).

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java?rev=1763511&r1=1763510&r2=1763511&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 
Thu Oct  6 07:58:47 2016
@@ -18,6 +18,8 @@
 package org.apache.coyote.http11.filters;
 
 import java.io.IOException;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.coyote.InputBuffer;
@@ -39,7 +41,7 @@ public class BufferedInputFilter impleme
 
     // ----------------------------------------------------- Instance Variables
 
-    private ByteChunk buffered = null;
+    private ByteBuffer buffered;
     private final ByteChunk tempRead = new ByteChunk(1024);
     private InputBuffer buffer;
     private boolean hasRead = false;
@@ -64,8 +66,8 @@ public class BufferedInputFilter impleme
      */
     public void setLimit(int limit) {
         if (buffered == null) {
-            buffered = new ByteChunk(4048);
-            buffered.setLimit(limit);
+            buffered = ByteBuffer.allocate(limit);
+            buffered.flip();
         }
     }
 
@@ -81,10 +83,12 @@ public class BufferedInputFilter impleme
         // save off the Request body
         try {
             while (buffer.doRead(tempRead) >= 0) {
-                buffered.append(tempRead);
+                
buffered.mark().position(buffered.limit()).limit(buffered.capacity());
+                buffered.put(tempRead.getBytes(), tempRead.getStart(), 
tempRead.getLength());
+                buffered.limit(buffered.position()).reset();
                 tempRead.recycle();
             }
-        } catch(IOException ioe) {
+        } catch(IOException | BufferOverflowException ioe) {
             // No need for i18n - this isn't going to get logged anywhere
             throw new IllegalStateException(
                     "Request body too large for buffer");
@@ -96,12 +100,12 @@ public class BufferedInputFilter impleme
      */
     @Override
     public int doRead(ByteChunk chunk) throws IOException {
-        if (hasRead || buffered.getLength() <= 0) {
+        if (isFinished()) {
             return -1;
         }
 
-        chunk.setBytes(buffered.getBytes(), buffered.getStart(),
-                buffered.getLength());
+        chunk.setBytes(buffered.array(), buffered.arrayOffset() + 
buffered.position(),
+                buffered.remaining());
         hasRead = true;
         return chunk.getLength();
     }
@@ -114,10 +118,10 @@ public class BufferedInputFilter impleme
     @Override
     public void recycle() {
         if (buffered != null) {
-            if (buffered.getBuffer().length > 65536) {
+            if (buffered.capacity() > 65536) {
                 buffered = null;
             } else {
-                buffered.recycle();
+                buffered.position(0).limit(0);
             }
         }
         tempRead.recycle();
@@ -137,12 +141,12 @@ public class BufferedInputFilter impleme
 
     @Override
     public int available() {
-        return buffered.getLength();
+        return buffered.remaining();
     }
 
 
     @Override
     public boolean isFinished() {
-        return hasRead || buffered.getLength() <= 0;
+        return hasRead || buffered.remaining() <= 0;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to