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()清空数据