有一些情況柒瓣,你只想把Buffer的一部分輸出儒搭,然后下次再接著操作,下次操作的時(shí)候下標(biāo)也要從0開(kāi)始芙贫。這么做的話搂鲫,就必須將未讀的數(shù)據(jù)左移至開(kāi)頭,這樣做毫無(wú)疑問(wèn)是低效率的磺平,如果一定要這么做的話魂仍,Buffer提供了compact方法
buffer.compact();
假設(shè)你輸出了兩個(gè)字符那么現(xiàn)在概念圖就會(huì)變成這樣:
48BBB9F226F5DD44A7CE940747B47BDE.jpg
然后你調(diào)用了compact方法
4A7013E3CD5086017F254507F2F79C47.jpg
4拐辽,5都會(huì)保持不變,還是同樣的道理擦酌,Buffer不會(huì)做那些看上去合理但并沒(méi)有用的操作俱诸。
Mark方法,允許buffer記下一個(gè)位置赊舶,如果reset被調(diào)用睁搭,那么position會(huì)轉(zhuǎn)移到mark的位置。如果在mark還未指定的情況下調(diào)用reset锯岖,會(huì)拋出InvalidMarkException介袜。如果你調(diào)用一些buffer方法,mark標(biāo)記會(huì)被丟棄出吹,比如rewind,clear和flip辙喂。如果調(diào)用帶參數(shù)的limit或者position方法捶牢,如果該參數(shù)值在mark標(biāo)記之前,那么mark也會(huì)廢棄巍耗。