本文整理汇总了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;
}
示例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;
}
}
}
示例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 ) );
}
示例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;
}