Java NIO中关于buffer.clear()的一点思路
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java NIO中关于buffer.clear()的一点思路,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1435字,纯文字阅读大概需要3分钟。
内容图文
![Java NIO中关于buffer.clear()的一点思路](/upload/InfoBanner/zyjiaocheng/847/5645ad43f4114a76b53c85c7a600a793.jpg)
在学习JavaNIO中看到关于Buffer的部分时提到buffer调用clear()方法不会真正的删除掉buffer中的数据,只是把position移动到最前面,同时把limit调整为capacity,忽然想到,如果不是真的删除掉buffer中的数据,那么如果之前写入buffer中五个字符:
CharBuffer buf = CharBuffer.allocate(48);
buf.put(new char[] {'a', 'b', 'c', 'd', 'e'});
但是只读取了一个:
System.out.println(buf.get()); // 此时输出为 a
如果这个时候clear一下,重新写入一个新的字符,再次读取第一个应该是我们新写入的字符:
buf.clear();
buf.put('g');
buf.flip();
System.out.println(buf.get()); // 此时输出为 g
如果此时之前的数据没有真的清除,那么应该可以继续读取上一次未读取的内容,这样的话就仅仅是从0位置覆盖原来的buffer进行写入,再次读取:
System.out.println(buf.get()); // 预期输出为 b
但是:
g
java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Buffer.java:500)
at java.nio.HeapCharBuffer.get(HeapCharBuffer.java:135)
at TestBuffer.main(TestBuffer.java:13)
此处抛出了异常,实践后才想起来一个重点,当第二次写入新的字符时,要重新读取执行flip()方法时会将limit改为新的position,根本没有给我们机会去读buffer中的旧数据。
完整测试代码如下:
import java.nio.CharBuffer;
public class TestBuffer {
public static void main(String[] args) {
CharBuffer buf = CharBuffer.allocate(48);
buf.put(new char[] {'a', 'b', 'c', 'd', 'e'});
buf.flip();
System.out.println(buf.get());
buf.clear();
buf.put('g');
buf.flip();
System.out.println(buf.get());
System.out.println(buf.get());
}
}
完整运行结果如下:
内容总结
以上是互联网集市为您收集整理的Java NIO中关于buffer.clear()的一点思路全部内容,希望文章能够帮你解决Java NIO中关于buffer.clear()的一点思路所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。