📄 cumulativeprotocoldecoder.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--NewPage--><HTML><HEAD><!-- Generated by javadoc (build 1.6.0_04) on Tue Feb 19 10:50:43 MST 2008 --><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><TITLE>CumulativeProtocolDecoder (Apache MINA 2.0.0-M1 API Documentation)</TITLE><META NAME="date" CONTENT="2008-02-19"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){ if (location.href.indexOf('is-external=true') == -1) { parent.document.title="CumulativeProtocolDecoder (Apache MINA 2.0.0-M1 API Documentation)"; }}</SCRIPT><NOSCRIPT></NOSCRIPT></HEAD><BODY BGCOLOR="white" onload="windowTitle();"><HR><!-- ========= START OF TOP NAVBAR ======= --><A NAME="navbar_top"><!-- --></A><A HREF="#skip-navbar_top" title="Skip navigation links"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_top_firstrow"><!-- --></A><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> <TR ALIGN="center" VALIGN="top"> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/CumulativeProtocolDecoder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="../../../../../org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.html" title="class in org.apache.mina.filter.codec"><B>PREV CLASS</B></A> <A HREF="../../../../../org/apache/mina/filter/codec/ProtocolCodecException.html" title="class in org.apache.mina.filter.codec"><B>NEXT CLASS</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="../../../../../index.html?org/apache/mina/filter/codec/CumulativeProtocolDecoder.html" target="_top"><B>FRAMES</B></A> <A HREF="CumulativeProtocolDecoder.html" target="_top"><B>NO FRAMES</B></A> <SCRIPT type="text/javascript"> <!-- if(window==top) { document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); } //--></SCRIPT><NOSCRIPT> <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_top"></A><!-- ========= END OF TOP NAVBAR ========= --><HR><!-- ======== START OF CLASS DATA ======== --><H2><FONT SIZE="-1">org.apache.mina.filter.codec</FONT><BR>Class CumulativeProtocolDecoder</H2><PRE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A> <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../org/apache/mina/filter/codec/ProtocolDecoderAdapter.html" title="class in org.apache.mina.filter.codec">org.apache.mina.filter.codec.ProtocolDecoderAdapter</A> <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>org.apache.mina.filter.codec.CumulativeProtocolDecoder</B></PRE><DL><DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../org/apache/mina/filter/codec/ProtocolDecoder.html" title="interface in org.apache.mina.filter.codec">ProtocolDecoder</A></DD></DL><DL><DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.html" title="class in org.apache.mina.filter.codec.demux">DemuxingProtocolDecoder</A>, <A HREF="../../../../../org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.html" title="class in org.apache.mina.filter.codec.serialization">ObjectSerializationDecoder</A>, <A HREF="../../../../../org/apache/mina/filter/codec/prefixedstring/PrefixedStringDecoder.html" title="class in org.apache.mina.filter.codec.prefixedstring">PrefixedStringDecoder</A></DD></DL><HR><DL><DT><PRE>public abstract class <B>CumulativeProtocolDecoder</B><DT>extends <A HREF="../../../../../org/apache/mina/filter/codec/ProtocolDecoderAdapter.html" title="class in org.apache.mina.filter.codec">ProtocolDecoderAdapter</A></DL></PRE><P>A <A HREF="../../../../../org/apache/mina/filter/codec/ProtocolDecoder.html" title="interface in org.apache.mina.filter.codec"><CODE>ProtocolDecoder</CODE></A> that cumulates the content of received buffers to a <em>cumulative buffer</em> to help users implement decoders. <p> If the received <A HREF="../../../../../org/apache/mina/common/IoBuffer.html" title="class in org.apache.mina.common"><CODE>IoBuffer</CODE></A> is only a part of a message. decoders should cumulate received buffers to make a message complete or to postpone decoding until more buffers arrive. <p> Here is an example decoder that decodes CRLF terminated lines into <code>Command</code> objects: <pre> public class CrLfTerminatedCommandLineDecoder extends CumulativeProtocolDecoder { private Command parseCommand(IoBuffer in) { // Convert the bytes in the specified buffer to a // Command object. ... } protected boolean doDecode( IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { // Remember the initial position. int start = in.position(); // Now find the first CRLF in the buffer. byte previous = 0; while (in.hasRemaining()) { byte current = in.get(); if (previous == '\r' && current == '\n') { // Remember the current position and limit. int position = in.position(); int limit = in.limit(); try { in.position(start); in.limit(position); // The bytes between in.position() and in.limit() // now contain a full CRLF terminated line. out.write(parseCommand(in.slice())); } finally { // Set the position to point right after the // detected line and set the limit to the old // one. in.position(position); in.limit(limit); } // Decoded one line; CumulativeProtocolDecoder will // call me again until I return false. So just // return true until there are no more lines in the // buffer. return true; } previous = current; } // Could not find CRLF in the buffer. Reset the initial // position to the one we recorded above. in.position(start); return false; } } </pre> <p> Please note that this decoder simply forward the call to <A HREF="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoder.html#doDecode(org.apache.mina.common.IoSession, org.apache.mina.common.IoBuffer, org.apache.mina.filter.codec.ProtocolDecoderOutput)"><CODE>doDecode(IoSession, IoBuffer, ProtocolDecoderOutput)</CODE></A> if the underlying transport doesn't have a packet fragmentation. Whether the transport has fragmentation or not is determined by querying <A HREF="../../../../../org/apache/mina/common/TransportMetadata.html" title="interface in org.apache.mina.common"><CODE>TransportMetadata</CODE></A>.<P><P><DL><DT><B>Version:</B></DT> <DD>$Rev: 604802 $, $Date: 2007-12-17 02:22:05 -0700 (Mon, 17 Dec 2007) $</DD><DT><B>Author:</B></DT> <DD>The Apache MINA Project (dev@mina.apache.org)</DD></DL><HR><P><!-- ======== CONSTRUCTOR SUMMARY ======== --><A NAME="constructor_summary"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"><TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"><B>Constructor Summary</B></FONT></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>protected </CODE></FONT></TD><TD><CODE><B><A HREF="../../../../../org/apache/mina/filter/codec/CumulativeProtocolDecoder.html#CumulativeProtocolDecoder()">CumulativeProtocolDecoder</A></B>()</CODE><BR> Creates a new instance.</TD></TR></TABLE> <!-- ========== METHOD SUMMARY =========== --><A NAME="method_summary"><!-- --></A>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -