这一章节我们来讨论一下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是怎样存储的。
这一章节就到这里,谢谢。
-----------------------------------
目录