當前位置: 首頁>>代碼示例>>Java>>正文


Java IoBuffer.skip方法代碼示例

本文整理匯總了Java中org.apache.mina.core.buffer.IoBuffer.skip方法的典型用法代碼示例。如果您正苦於以下問題:Java IoBuffer.skip方法的具體用法?Java IoBuffer.skip怎麽用?Java IoBuffer.skip使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在org.apache.mina.core.buffer.IoBuffer的用法示例。


在下文中一共展示了IoBuffer.skip方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: messageLength

import org.apache.mina.core.buffer.IoBuffer; //導入方法依賴的package包/類
private int messageLength ( final IoBuffer data )
{
    final int len = data.getUnsignedShort ( data.position () + 3 );
    if ( data.remaining () < 5 + len )
    {
        return -1;
    }

    data.skip ( 5 );

    return len;
}
 
開發者ID:eclipse,項目名稱:neoscada,代碼行數:13,代碼來源:ProtocolDecoderImpl.java

示例2: decodable

import org.apache.mina.core.buffer.IoBuffer; //導入方法依賴的package包/類
@Override
public MessageDecoderResult decodable(IoSession session, IoBuffer in)
{
	
	Context context = (Context) session.getAttribute(CONTEXT);
	if(context!=null){
		if(context.limit_data){
			in.buf().position(0);
		}
	}
	//表示數據不夠,需要讀到新的數據後,再次調用decode()方法。
	if (in.remaining() < 2){
		return MessageDecoderResult.NEED_DATA;
	}
	else{
			context = new Context();
			//獲取一個字符表示新的數據開始 用於判斷異常數據
			in.skip(1);//這個數據是十六進製的 01 也就是1
			//獲取第一個字符用於判斷是否可以被當前解碼器解碼
			context.dataType = in.getInt();
			
			if(context.dataType == BeanUtil.UPLOAD_STR){
				//讀取標題長度
				context.strLength = in.getInt();
				//聲明數組長度
				context.byteStr = new byte[context.strLength];
				//System.out.println("我收到2了");
				session.setAttribute(CONTEXT, context);
				//表示可以解碼
				return MessageDecoderResult.OK;
			}else{
				//System.out.println("服務端收到意外數據");
				return MessageDecoderResult.NOT_OK;
			}
		}
}
 
開發者ID:Xvms,項目名稱:xvms,代碼行數:37,代碼來源:StringProtocolDecoder.java

示例3: doDecode

import org.apache.mina.core.buffer.IoBuffer; //導入方法依賴的package包/類
@Override
protected boolean doDecode ( final IoSession session, final IoBuffer data, final ProtocolDecoderOutput out ) throws Exception
{
    byte marker1;
    byte marker2;

    do
    {
        if ( data.remaining () < 2 ) // we may only eat the start when there could be a packet after it
        {
            return false;
        }

        // peek marker
        marker1 = data.get ( data.position () + 0 );
        marker2 = data.get ( data.position () + 1 );

        // TODO: re-think the idea of just skipping

        if ( marker1 != 0x12 || marker2 != 0x02 )
        {
            data.skip ( 2 ); // eat garbage
        }
    } while ( marker1 != 0x12 || marker2 != 0x02 );

    if ( data.remaining () < 3 )
    {
        return false;
    }

    data.order ( Sessions.isLittleEndian ( session ) ? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN );

    final byte command = data.get ( data.position () + 2 );
    switch ( command )
    {
        case Messages.MC_HELLO:
            return processHello ( session, data, out );
        case Messages.MC_WELCOME:
            return processWelcome ( session, data, out );
        case Messages.MC_READ_ALL:
            out.write ( new ReadAll () );
            return true;
        case Messages.MC_DATA_UPDATE:
            return processDataUpdate ( session, data, out );
        case Messages.MC_START_BROWSE:
            out.write ( new SubscribeBrowse () );
            return true;
        case Messages.MC_STOP_BROWSE:
            out.write ( new UnsubscribeBrowse () );
            return true;
        case Messages.MC_NS_ADDED:
            return processBrowseAdded ( session, data, out );
        case Messages.MC_WRITE_COMMAND:
            return processWriteCommand ( session, data, out );
        case Messages.MC_WRITE_RESULT:
            return processWriteResult ( session, data, out );
    }

    throw new ProtocolCodecException ( String.format ( "Message code %02x is unkown", command ) );
}
 
開發者ID:eclipse,項目名稱:neoscada,代碼行數:61,代碼來源:ProtocolDecoderImpl.java

示例4: decode

import org.apache.mina.core.buffer.IoBuffer; //導入方法依賴的package包/類
@Override
public MessageDecoderResult decode(IoSession session, IoBuffer in,ProtocolDecoderOutput outPut) throws Exception {
	//將客戶端發來的對象進行封裝
	//TODO  等待測試超長數據是否能正常解碼 
	Context context = (Context) session.getAttribute(CONTEXT);
	//跳過第一個字節
	if(!context.init){
		in.buf().position(0);//由於分包之後mina不能讓沒有改變的緩衝數據返回正常,於是先移動了下遊標,這裏給歸0
		context.init = true;
		in.skip(1);
		in.getInt();
		in.getInt();
	}
 
	int count = context.count;
	//System.out.println("這裏是第一次COnut:"+context.count);
	//System.out.println("一共有"+in.remaining()+"數據");
	while (in.hasRemaining()) {
		//System.out.println("循環裏麵的Count:"+count);
		byte b = in.get();
		if(b == 1){
			//收到下一條的起始數據了,證明此條數據已經殘缺 重置緩衝區 作廢此信息
			in.buf().position(1);//移動遊標,mina不允許不使用數據就返回
			context.reset();//重置
			context.limit_data = true;//用於判斷是否是前一次包破損後遺留下的新數據包  decodable中判斷
			session.setAttribute(CONTEXT, context);
			return MessageDecoderResult.OK;//給他返回個正常解碼,然後才能繼續解碼
		}
		new String(context.byteStr,BeanUtil.charset);
		//如果標題沒讀完 繼續讀
		if(!context.isReadName){
			context.byteStr[count] = b;
			if(count == context.strLength-1){
				//標題讀完  byte[]轉換為字符串
				context.fileName = new String(context.byteStr,BeanUtil.charset);
				//System.out.println(context.fileName);
				//count = -1;
				context.isReadName = true;
				//跳出程序
				break;
			}
		}
		/*
		if(context.isReadName && count != -1){
			//如果讀取完了標題那麽讀取其他內容
			//byteFile[count] = b;
		}
		//byteFile[count] = b;
		 */
		//這裏並未判斷是否後麵還有數據就加了1
		if(in.buf().position()<=in.buf().limit())
		count++;
          }
 
	context.count = count;
	session.setAttribute(CONTEXT, context);
	//如果內容全部讀完  那麽就存入並返回數據
	//System.out.println("Count:"+context.count+";----StrLen:"+context.strLength);
	if(context.count == context.strLength-1){
		//這裏就代表數據全部接收完了 返回出去
		
		BaseMessage message = new BaseMessage();
		message.setDataType(context.dataType);
		StringBean bean = new StringBean();
		bean.setFileName(context.fileName);
		bean.setStrLength(context.strLength);
		message.setData(bean);
		outPut.write(message);
		//重置
		context.reset();
 
	}else{
		return  MessageDecoderResult.NEED_DATA;
	}
	//this.finishDecode(session, outPut);
	
	return MessageDecoderResult.OK;
}
 
開發者ID:Xvms,項目名稱:xvms,代碼行數:79,代碼來源:StringProtocolDecoder.java


注:本文中的org.apache.mina.core.buffer.IoBuffer.skip方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。