Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据
2009-10-28 00:00:00 来源:WEB开发网为了回顾上面所讲内容,下面的代码总结了创建缓冲区、读写缓冲区中的数据、设置缓冲区的limit和position的方法。
package net;
import java.nio.*;
public class GetPutData
{
public static void main(String[] args)
{
// 创建缓冲区的四种方式
IntBuffer intBuffer = IntBuffer.allocate(10);
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(10);
CharBuffer charBuffer = CharBuffer.wrap("abcdefg");
DoubleBuffer doubleBuffer = DoubleBuffer.wrap(new double[] { 1.1, 2.2 });
// 向缓冲区中写入数据
intBuffer.put(1000);
intBuffer.put(2000);
System.out.println("intBuffer的当前位置:" + intBuffer.position());
intBuffer.position(1); // 将缓冲区的当前位置设为1
System.out.println(intBuffer.get()); // 输出缓冲区的当前数据
intBuffer.rewind(); // 将缓冲区的当前位置设为0
System.out.println(intBuffer.get()); // 输出缓冲区的当前数据
byteBuffer.put((byte)20);
byteBuffer.put((byte)33);
byteBuffer.flip(); // 将limit设为position,在这里是2
byteBuffer.rewind();
while(byteBuffer.hasRemaining()) // 枚举byteBuffer中的数据
System.out.print(byteBuffer.get() + " ");
while(charBuffer.hasRemaining()) // 枚举charBuffer中的数据
System.out.print(charBuffer.get() + " ");
// 枚举doubleBuffer中的数据
while(doubleBuffer.position() < doubleBuffer.limit())
System.out.print(doubleBuffer.get() + " ");
}
}
运行结果:
intBuffer的当前位置:2
2000
1000
20 33 a b c d e f g 1.1 2.2
注意:如果必须使用缓冲区的大小来读取缓冲区的数据,尽量不要使用capacity,而要使用limit。如尽量不要写成如下的代码:
while(byteBuffer.position() < byteBuffer.capacity())
System.out.println(byteBuffer.get());
这是因为当limit比capacity小时,上面的代码将会抛出一个BufferUnderflowException异常。
更多精彩
赞助商链接