当前位置: 代码迷 >> Java相关 >> 高手来帮小弟我看一上 CharBuffer 使用疑问
  详细解决方案

高手来帮小弟我看一上 CharBuffer 使用疑问

热度:3809   发布时间:2013-02-25 21:42:57.0
高手来帮我看一下 CharBuffer 使用疑问
import java.nio.CharBuffer;

public class BufferTest
{  

public static void main(String[] args)
{
           String str = "看看怎么用";

CharBuffer cha = CharBuffer.allocate(16);

cha.put(str);
String str1 = cha.toString();
System.out.println(str1);

}
}

输出的确实一串空格





请问这是哪里出错了?
没有错误,楼主在进行put(str)操作后,缓冲区的位置(position)由0变成4了。
这时输出缓冲区内容,从这个位置开始到"限制"位置(就是其容量16),之间的内容,这些这时都是 0。所以看到输出12个框框。
解决的办法,很简单,在放入数据后,把“位置”返回到开始,把"限制"设置到刚写入的末尾,方法是 flip(),再输出就会把刚写入到缓冲区的内容输出了。
有点像录音之后播放的过程,当你录了一段内容后,录音带的位置从开始转动了一段长度,这段长度正好是记录了内容。如果你要播放,就需要"倒带",倒回到你开始录的位置,再播放,正好播放处你刚录的内容。我们对缓冲区的flip(),就是这个倒带的过程。
代码修改一下,楼主试试:


public class BufferTest
{  
public static void main(String[] args)
{
String str = "看怎么用";
CharBuffer cha = CharBuffer.allocate(16);
//输出缓冲区的 position and limit
//
System.out.println("刚创建缓冲区 position is "+cha.position()+"  limit is "
+cha.limit());
cha.put(str); //存入数据。
//再看这两个参数。
System.out.println("存入数组后   position is "+cha.position()+"  limit is "
+cha.limit());
cha.flip(); //“倒带”后再看
System.out.println("flip() 以后  position is "+cha.position()+"  limit is "
+cha.limit());
String str1 = cha.toString();
System.out.println(str1);
}
}