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