最近用到BufferByte来缓存大量数据,然后就遇到了BufferByte的array()方法无法使用的情况,
而当数据比较少的时候,array()方法可以正常使用。
BufferByte buffer=BufferByte.allocate(22222222);
BufferByte转byte[]:
byte[] b=new byte[len];
buffer.get(b,0,b.length);
byte[]存到BufferByte中:
buffer.put(b,0,b.length);
上述转化过程在网上都可以找到,但是现在出现了一个问题,就是先把数据读入BufferByte,
但是直接读取却无法读取,或者采用循环的方式将分段的数据存入BufferByte时可能会出现
程序卡住的情况。此时就需要position(int pos)这个方法来重新指定开始读取数据的位置。
buffer.get()这个方法执行一次之后,指针会下移一位,如果再次buffer.get(),那么读
取的就是下一位字符。此时就需要注意是从什么位置开始读取数据,什么时候需要重置读取
位置。
此外,我们需要谨慎使用flip(),此方法会改变limit值,给分段多次存储带来不便。
public void testTransfer(){
/* ByteBuffer buffer=ByteBuffer.allocate(256);
buffer.put(TestString.hexStringToBytes("fffff"),0,4);
System.out.println(buffer.toString());*/
String s="14086E29B8A0042299484348A69A2C491D34D202314A2ABA8C70A78A194380A78A063853B14143A8A007629D8A005C53A980B4EC5002E2971400B8A5C5020C51400B49400518";
String s1="567886E29B8A0042299484348A69A2C491D34D202314A2ABA8C70A78A194380A78A063853B14143A8A007629D8A005C53A980B4EC5002E2971400B8A5C5020C51400B49400518";
String s2="999999329B8A0042299484348A69A2C491D34D202314A2ABA8C70A78A194380A78A063853B14143A8A007629D8A005C53A980B4EC5002E2971400B8A5C5020C51400B49400518";
System.out.println(s);
byte[] b=TestString.hexStringToBytes(s);
ByteBuffer buffer=ByteBuffer.allocate(222222);
/*buffer.get(b, 0, b.length);
buffer.position(0);
System.out.println(buffer.get());
System.out.println(buffer.get());
System.out.println(buffer.get());*/
// ByteBuffer buffer=ByteBuffer.wrap(b);
// buffer.wrap(b);
// buffer.put((byte)'a');
buffer.position(0);//从下标为1的地方开始插入数据
buffer.put(s.getBytes(), 0, s.length());
System.out.println("buffer=================="+buffer);
buffer.position(s.length());//从下标为1的地方开始插入数据
buffer.put(s1.getBytes(), 0, s1.length());
System.out.println("buffer=================="+buffer);
}