Optimized HttpMessageDecoder.readHeader()

This commit is contained in:
Trustin Lee 2009-06-15 09:06:56 +00:00
parent bda2f0a852
commit ee8ffec265

View File

@ -395,20 +395,24 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
private String readHeader(ChannelBuffer buffer) throws TooLongFrameException {
StringBuilder sb = new StringBuilder(64);
int headerSize = this.headerSize;
while (true) {
byte nextByte = buffer.readByte();
if (nextByte == HttpCodecUtil.CR) {
nextByte = buffer.readByte();
loop:
for (;;) {
char nextByte = (char) buffer.readByte();
headerSize ++;
switch (nextByte) {
case HttpCodecUtil.CR:
nextByte = (char) buffer.readByte();
headerSize ++;
if (nextByte == HttpCodecUtil.LF) {
this.headerSize = headerSize + 2;
return sb.toString();
break loop;
}
break;
case HttpCodecUtil.LF:
break loop;
}
else if (nextByte == HttpCodecUtil.LF) {
this.headerSize = headerSize + 1;
return sb.toString();
}
else {
// Abort decoding if the header part is too large.
if (headerSize >= maxHeaderSize) {
throw new TooLongFrameException(
@ -416,10 +420,12 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
maxHeaderSize + " bytes.");
}
headerSize ++;
sb.append((char) nextByte);
}
sb.append(nextByte);
}
this.headerSize = headerSize;
return sb.toString();
}
protected abstract boolean isDecodingRequest();