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