public class LineBasedFrameDecoder extends ByteToMessageDecoder
ByteBuf
s on line endings.
Both "\n"
and "\r\n"
are handled.
The byte stream is expected to be in UTF-8 character encoding or ASCII. The current implementation
uses direct byte
to char
cast and then compares that char
to a few low range
ASCII characters like '\n'
or '\r'
. UTF-8 is not using low range [0..0x7F]
byte values for multibyte codepoint representations therefore fully supported by this implementation.
For a more general delimiter-based decoder, see DelimiterBasedFrameDecoder
.
Users should be aware that used as is, the lenient approach on lone '\n
might result on a parser
diffenrencial on line based protocols requiring the use of "\r\n"
delimiters like SMTP and can
result in attacks similar to
SMTP smuggling.
Validating afterward the end of line pattern can be a possible mitigation.
ByteToMessageDecoder.Cumulator
ChannelHandler.Sharable
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
构造器和说明 |
---|
LineBasedFrameDecoder(int maxLength)
Creates a new decoder.
|
LineBasedFrameDecoder(int maxLength,
boolean stripDelimiter,
boolean failFast)
Creates a new decoder.
|
限定符和类型 | 方法和说明 |
---|---|
protected java.lang.Object |
decode(ChannelHandlerContext ctx,
ByteBuf buffer)
Create a frame out of the
ByteBuf and return it. |
protected void |
decode(ChannelHandlerContext ctx,
ByteBuf in,
java.util.List<java.lang.Object> out)
Decode the from one
ByteBuf to an other. |
actualReadableBytes, callDecode, channelInactive, channelRead, channelReadComplete, decodeLast, discardSomeReadBytes, handlerRemoved, handlerRemoved0, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught
ensureNotSharable, handlerAdded, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
handlerAdded
public LineBasedFrameDecoder(int maxLength)
maxLength
- the maximum length of the decoded frame.
A TooLongFrameException
is thrown if
the length of the frame exceeds this value.public LineBasedFrameDecoder(int maxLength, boolean stripDelimiter, boolean failFast)
maxLength
- the maximum length of the decoded frame.
A TooLongFrameException
is thrown if
the length of the frame exceeds this value.stripDelimiter
- whether the decoded frame should strip out the
delimiter or notfailFast
- If true, a TooLongFrameException
is
thrown as soon as the decoder notices the length of the
frame will exceed maxFrameLength regardless of
whether the entire frame has been read.
If false, a TooLongFrameException
is
thrown after the entire frame that exceeds
maxFrameLength has been read.protected final void decode(ChannelHandlerContext ctx, ByteBuf in, java.util.List<java.lang.Object> out) throws java.lang.Exception
ByteToMessageDecoder
ByteBuf
to an other. This method will be called till either the input
ByteBuf
has nothing to read when return from this method or till nothing was read from the input
ByteBuf
.decode
在类中 ByteToMessageDecoder
ctx
- the ChannelHandlerContext
which this ByteToMessageDecoder
belongs toin
- the ByteBuf
from which to read dataout
- the List
to which decoded messages should be addedjava.lang.Exception
- is thrown if an error occursprotected java.lang.Object decode(ChannelHandlerContext ctx, ByteBuf buffer) throws java.lang.Exception
ByteBuf
and return it.ctx
- the ChannelHandlerContext
which this ByteToMessageDecoder
belongs tobuffer
- the ByteBuf
from which to read dataByteBuf
which represent the frame or null
if no frame could
be created.java.lang.Exception