数据流,封包取值操作类

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class PacketBuffer {
	private ByteArrayOutputStream mOut;
	private ByteArrayInputStream mIn;
	
	public PacketBuffer() {
		// TODO Auto-generated constructor stub
		mOut = new ByteArrayOutputStream();
	}
	
	public int Size(){
		return mOut.size();
	}
	
	public void Reset(){
		mOut.reset();
	}
	
	public void Write(byte[] n){
		try {
			mOut.write(n);
			mOut.flush();
		//	System.out.println("NowSize="+mOut.size());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public boolean Read(byte[] n){
		try {
			if (n.length <= mOut.size()){
				byte[] bs = new byte[mOut.size()];
				byte[] ns = new byte[mOut.size() - n.length];
				bs = mOut.toByteArray();
				//System.out.println("ReadSize="+bs.length);
				//System.out.println("OtherSize="+ns.length);
				mIn = new ByteArrayInputStream(bs);
				mIn.read(n);
				mIn.read(ns);
				mIn.close();
				
				mOut.reset();
				mOut.write(ns);
				mOut.flush();
				//System.out.println("OverSize="+mOut.size());
				return true;
			}
			return false;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}	
}


工作原理:

     1、将byte数组,用packet.write的方法写入

     2、取数据使用packet.read方法,可以根据需求长度取

     3、取出数据后packet内数据长度自动调整(当前长度 = 总长度 - 取出长度)

     4、packet存储方式与堆栈同理

     5、可使用packet.reset()清空数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值