﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Animals</title><link>http://www.blogjava.net/sdjxsgb/</link><description>One thing I know,that is I know nothing. -- Socrates Greek</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:04:54 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:04:54 GMT</pubDate><ttl>60</ttl><item><title>java.nio.ByteBuffer中flip、rewind、clear方法的区别</title><link>http://www.blogjava.net/sdjxsgb/archive/2013/06/18/400703.html</link><dc:creator>sdjxsgb</dc:creator><author>sdjxsgb</author><pubDate>Tue, 18 Jun 2013 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/sdjxsgb/archive/2013/06/18/400703.html</guid><wfw:comment>http://www.blogjava.net/sdjxsgb/comments/400703.html</wfw:comment><comments>http://www.blogjava.net/sdjxsgb/archive/2013/06/18/400703.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sdjxsgb/comments/commentRss/400703.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sdjxsgb/services/trackbacks/400703.html</trackback:ping><description><![CDATA[
对缓冲区的读写操作首先要知道缓冲区的下限、上限和当前位置。下面这些变量的值对Buffer类中的某些操作有着至关重要的作用：
<ol><li>
    limit：所有对Buffer读写操作都会以limit变量的值作为上限。
    </li><li>
    position：代表对缓冲区进行读写时，当前游标的位置。
    </li><li>
    capacity：代表缓冲区的最大容量（一般新建一个缓冲区的时候，limit的值和capacity的值默认是相等的）。
    </li>
</ol>
flip、rewind、clear这三个方法便是用来设置这些值的。<br />
<h3>clear方法</h3>
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;Buffer&nbsp;clear()<br />
<img id="Codehighlighter1_28_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_122_Open_Text.style.display='none'; Codehighlighter1_28_122_Closed_Image.style.display='inline'; Codehighlighter1_28_122_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_28_122_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_28_122_Closed_Text.style.display='none'; Codehighlighter1_28_122_Open_Image.style.display='inline'; Codehighlighter1_28_122_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_28_122_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_28_122_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;position&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">重置当前读写位置</span><span style="color: rgb(0, 128, 0);"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;limit&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;capacity;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;mark&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">取消标记</span><span style="color: rgb(0, 128, 0);"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: rgb(0, 0, 0);"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<br />
clear方法将缓冲区清空，一般是在<strong>重新写缓冲区</strong>时调用。
<h3>flip方法</h3>
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img id="Codehighlighter1_27_101_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_101_Open_Text.style.display='none'; Codehighlighter1_27_101_Closed_Image.style.display='inline'; Codehighlighter1_27_101_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_27_101_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_27_101_Closed_Text.style.display='none'; Codehighlighter1_27_101_Open_Image.style.display='inline'; Codehighlighter1_27_101_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> Buffer flip() </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_27_101_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_27_101_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    limit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> position;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    position </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    mark </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
反转缓冲区。首先将限制设置为当前位置，然后将位置设置为 0。如果已定义了标记，则丢弃该标记。 常与compact方法一起使用。通常情况下，在准备<strong>从缓冲区中读取数据</strong>时调用flip方法。
<h3>rewind方法</h3>
<br />
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">1</span><img id="Codehighlighter1_29_81_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_81_Open_Text.style.display='none'; Codehighlighter1_29_81_Closed_Image.style.display='inline'; Codehighlighter1_29_81_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_29_81_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_29_81_Closed_Text.style.display='none'; Codehighlighter1_29_81_Open_Image.style.display='inline'; Codehighlighter1_29_81_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> Buffer rewind() </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_29_81_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_29_81_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
</span><span style="color: rgb(0, 128, 128);">2</span><span style="color: rgb(0, 0, 0);"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    position </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">3</span><span style="color: rgb(0, 0, 0);"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    mark </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">4</span><span style="color: rgb(0, 0, 0);"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">5</span><span style="color: rgb(0, 0, 0);"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<br />
<br />
<br />
以上三种方法均使用final修饰，java.nio.Buffer的所有子类均使用同一种flip、clear和rewind机制。 
<img src ="http://www.blogjava.net/sdjxsgb/aggbug/400703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sdjxsgb/" target="_blank">sdjxsgb</a> 2013-06-18 17:32 <a href="http://www.blogjava.net/sdjxsgb/archive/2013/06/18/400703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>