这一章节我们来讨论一下ByteBuffer是怎样存储的?
1.例子:
package com.ray.ch16;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
public class Test {
public static void main(String[] args) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(16);
CharBuffer charBuffer = buffer.asCharBuffer();
charBuffer.put(new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' });
charBuffer.rewind();
while (charBuffer.hasRemaining()) {
System.out.print(charBuffer.position() + "->" + charBuffer.get()
+ " ");
}
System.out.println();
IntBuffer intBuffer = buffer.asIntBuffer();
intBuffer.put(new int[] { 1, 2, 3, 4 });
intBuffer.rewind();
while (intBuffer.hasRemaining()) {
System.out.print(intBuffer.position() + "->" + intBuffer.get()
+ " ");
}
System.out.println();
LongBuffer longBuffer = buffer.asLongBuffer();
longBuffer.put(new long[] { 1, 2 });
longBuffer.rewind();
while (longBuffer.hasRemaining()) {
System.out.print(longBuffer.position() + "->" + longBuffer.get()
+ " ");
}
}
}
输出:
0->a 1->b 2->c 3->d 4->e 5->f 6->g 7->h
0->1 1->2 2->3 3->4
0->1 1->2
解释一下,为什么上面的数据越来越少,因为每一个类别所占据的位数是不一样的,而buffer是包装了一个16位的数组,因此会出现这种情况。
2.buffer的存储是怎样的呢?
按照每一个类型的存储字节数不同,我们可以得出上面的图示。
第一种是char,第二种是int,第三种是long
其实XXXBuffer就是保证了一个规定长度的数组,如果超过这个长度,会抛异常。
3.通过参数来控制存储顺序
package com.ray.ch16;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.CharBuffer;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(16);
buffer.order(ByteOrder.BIG_ENDIAN);
CharBuffer charBuffer = buffer.asCharBuffer();
charBuffer.put("abcdefg");
System.out.println(Arrays.toString(buffer.array()));
System.out.println();
buffer.order(ByteOrder.LITTLE_ENDIAN);
charBuffer = buffer.asCharBuffer();
charBuffer.put("abcdefg");
System.out.println(Arrays.toString(buffer.array()));
}
}
输出:
[0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0]
[97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 0]
观察上面的代码,我们在里面加入了order来控制存储的顺序,从输出结果可以看出来。
总结:这一章节主要讨论了ByteBuffer是怎样存储的。
这一章节就到这里,谢谢。
-----------------------------------