首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2012-12-27 
高手来帮我看一下 CharBuffer使用疑问import java.nio.CharBufferpublic class BufferTest{public static

高手来帮我看一下 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);

}
}

输出的确实一串空格



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

请问这是哪里出错了?

[解决办法]
没有错误,楼主在进行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);
}
}

热点排行