在前面介绍Android OpenGL ES简明开发教程 说过为了提高性能,通常将顶点,颜色等值存放在java.nio 包中定义的Buffer类中。
ByteBuffer vbb
= ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
本篇简要介绍一下java.nio 包中各种Buffer的定义和用法,也为后面详细介绍Android OpenGL ES开发做点知识上的准备。
使用Java开发文件读取时经常用到的一个包是java.io ,包内定义了各种流Stream 类,将文件或是Stream看作一个byte数组,这种方法一般无法指定字节顺序(不同的计算机系统Byte order 可能不同),操作如“在文件偏移10个字节出读取一个四字节Little-endian整数“在使用Stream方式读取文件时就不十分方便。此外,Stream 方法是按一个字节一个字节方式处理的,读写性能上不是很好。
java.nio (这里的N代表New 新的IO包) 解决了上述java.io 包的这些局限,java.io 包包含了Buffer,Channel, charset 等,但OpenGL ES 只用到Buffer,Buffer具有以下特点:
- 允许以内存缓冲区(buffer)的方式来管理一个Buffer