在看nio的一个示例程序的时候看到ByteBuffer的filp方法,没想明白它是做什么用的。jdk的comment写到:
Flips this buffer. The limit is set to the current position and thenthe position is set to zero. If the mark is defined then it isdiscarded.
还是没明白。。。
从他的代码来看非常的简单,就是:
limit = position;
position = 0;
mark = -1;
理解这个三句话首先要明白limit, position和mark这三个变量的含义。position指的是buffer当前指针的位置,所有的读写操作都是从position开始的。limit是指向第一个不应该被读/写的位置。而mark是指buffer被reset时position应该回到的位置。所以从这里就可以看出,flip的做的事情其实是将position指到最头上,将limit设置为当前位置,并且将mark清除。
通常如果在写buffer结束,准备要开始从里面读的时候,就要调用这个flip方法先。
本文解释了Java NIO中ByteBuffer的flip方法的工作原理。通过调整position、limit和mark,此方法使得ByteBuffer可以从写模式切换到读模式。文章详细介绍了这些变量的作用及flip方法如何帮助实现读写操作的转换。
5593

被折叠的 条评论
为什么被折叠?



