📄 bytebufferoverplus.java
字号:
package com.pub.util;
import org.apache.log4j.Logger;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.util.ByteBufferUtil;
public class ByteBufferOverplus {
private static final Logger log = Logger.getLogger(ByteBufferUtil.class);
ByteBuffer buf = null;
int bufSize;
int len = 0;
public ByteBufferOverplus(int bufSize) {
this.bufSize = bufSize;
buf = ByteBuffer.allocate(bufSize,false);
log.debug("ByteBufferOverplus bufSize : " + bufSize);
}
public ByteBuffer getBuffer() {
return buf;
}
public void setBuffer(ByteBuffer buf) {
this.buf = buf;
}
public void bufClear() {
synchronized (buf) {
buf.clear();
}
}
public boolean setBufferTail(ByteBuffer inBuf) {
synchronized (buf) {
// log.debug("setBufferTail buf" + buf.buf());
// log.debug("setBufferTail inBuf" + inBuf.buf());
if (buf.position() < 4) {
int j = buf.position();
for (int i = 0; i < 4 - j; i++) {
buf.put(inBuf.get());
}
}
// log.debug("setBufferTail buf" + buf.buf());
// log.debug("setBufferTail inBuf" + inBuf.buf());
if (len == 0) {
len = buf.getInt(0);
}
// log.debug("setBufferTail buf" + buf.buf());
int j = buf.position();
// log.debug("setBufferTail inBuf " + "(" + len + "-" + j + ") <= (" + inBuf.limit() + "-" + inBuf.position()+")");
if((len - j) <= (inBuf.limit() - inBuf.position())){
// log.debug("setBufferTail inBuf true");
for (int i = 0; i < len - j; i++) {
buf.put(inBuf.get());
}
buf.flip();
return true;
} else {
// log.debug("setBufferTail inBuf false");
int k = inBuf.limit() - inBuf.position();
for (int i = 0; i < k; i++) {
buf.put(inBuf.get());
}
}
}
return false;
}
public void setBufferHead(ByteBuffer inBuf) {
synchronized (buf) {
len = 0;
buf.clear();
// log.debug("setBufferTail buf" + buf.buf());
// log.debug("setBufferTail inBuf" + inBuf.buf());
int j = inBuf.remaining();
// log.debug("setBufferHead : " + j);
// log.debug("setBufferHead befor inBuf : " + inBuf);
// log.debug("setBufferHead befor overbuf : " + buf);
for (int i = 0; i < j; i++) {
buf.put(inBuf.get());
}
// log.debug("setBufferHead after inBuf : " + inBuf);
// log.debug("setBufferHead after overbuf : " + buf);
// log.debug("setBufferTail buf" + buf.buf());
// log.debug("setBufferTail inBuf" + inBuf.buf());
if (buf.position() >= 4) {
len = buf.getInt(0);
} else {
len = 0;
}
// log.debug("setBufferTail buf" + buf.buf());
// log.debug("setBufferTail inBuf" + inBuf.buf());
// log.debug("=======================================================");
}
}
public static void main(String[] args) {
// ByteBufferOverplus bo = new ByteBufferOverplus(100);
// ByteBuffer b = ByteBuffer.allocate(8);
// b.putInt(12);
// b.putInt(1);
// b.flip();
//
// ByteBuffer c = ByteBuffer.allocate(16);
// c.putInt(100);
// c.putInt(12);
// c.putInt(1);
// c.putInt(101);
// c.flip();
//
// bo.setBufferHead(b);
// bo.setBufferTail(c);
//
// for (int i = 0; i < 3; i++) {
// System.out.println(bo.getBuffer().getInt());
// }
//
// for (int i = 0; i < 3; i++) {
// System.out.println(c.getInt());
// }
//
// System.out.println(bo.getBuffer());
// System.out.println(b);
// System.out.println(c);
//
// ByteBuffer d = ByteBuffer.allocate(8);
// d.putInt(16);
// d.putInt(1);
// d.flip();
//
// ByteBuffer e = ByteBuffer.allocate(20);
// e.putInt(100);
// e.putInt(10000);
// e.putInt(12);
// e.putInt(1);
// e.putInt(101);
// e.flip();
//
// bo.setBufferHead(d);
// bo.setBufferTail(e);
//
// for (int i = 0; i < 4; i++) {
// System.out.println(bo.getBuffer().getInt());
// }
// System.out.println(bo.getBuffer());
//
// ByteBuffer f = ByteBuffer.allocate(8);
// f.put((byte) 0);
// f.put((byte) 0);
// f.put((byte) 0);
// f.flip();
//
// ByteBuffer g = ByteBuffer.allocate(30);
// g.put((byte) 12);
// g.putInt(1);
// g.putInt(10000);
// g.putInt(12);
// g.putInt(1);
// g.putInt(101);
// g.flip();
//
// bo.setBufferHead(f);
// bo.setBufferTail(g);
//
// for (int i = 0; i < 3; i++) {
// System.out.println(bo.getBuffer().getInt());
// }
// System.out.println(bo.getBuffer());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -