ByteBufferの使用説明について


前にByteBufferの使用を見ましたが、問題はまだ若いので、今は古いです.だから、忘れました.ソースコードを見て理解しようと決心しました.
 
ByteBufferのAPIを調べてみます.見ているのは霧です.どんなマルク、position、limit、flip、resetの使い方が分かりません.まず次の例を見ます.
     String str = "helloWorld";
        ByteBuffer buff  = ByteBuffer.wrap(str.getBytes());
        System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
        //      
        buff.get();
        buff.get();
        System.out.println("position:"+ buff.get(buff.position())+"\t limit:"+buff.limit());
        buff.mark();
        System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
        buff.flip();
        System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());	
    :
position:0  limit:10
position:2  limit:10
position:2  limit:10
position:0  limit:2
 
 
  たちは がよく っている「ハローワールド」を っています.「ByteBufferで を します.ByteBufferは なタイプなので、wrapで した が に ってくるのはHeappyteBufferの です.HeappyteBufferはByteBufferのサブクラスで、 じByteBufferはBufferの なタイプのサブクラスです. のmark、freet、freet、Pure、Pure、PureはBure、Purerのサブクラスです.
いくつかの を します.wrap を び した 、Bufferで された は の りです.
コメント:
m:mark;
p:position;
L:limit;
 
    の はmarkは の を す の−1であり、postionは の を す0であり、Limitはbyte[]として えられた さである.
これが の の です.
m
p
L
-1
0
1
2
3
4
5
6
7
8
9
H
E
L
L
O
W
O
R
L
D
   たちが2 してget()メソッドを び して2バイトを すると、 び しごとにposition++の がトリガされます.この 、positionはindex=2のところに します.この 、Limitとmarkは しません. み った2バイトが されるとHとEになりますので、 は 2のギルドにあります.
position:2  limit:10 です
m、p
L
-1
0
1
2
3
4
5
6
7
8
9
H
E
L
L
O
W
O
R
L
D
     み わったら はマークを います.この はマルクは-1から2とpositionに して じ を します.Limitは わらないと られます.
m
p
L
-1
0
1
2
3
4
5
6
7
8
9
H
E
L
L
O
W
O
R
L
D
    マークを った のpositionでflipを び したら、その でLimitはpositionの を し、markとpositionを に します.これでlimitは 2という ですか?つまり、 めるバイト は2です.
たちは のコードを してみてもいいです.
 
 System.out.println((char)buff.get()+""+(char)buff.get());
     :ヘ
    これも しくないようです.コードを えたらいいです.
 
 // System.out.println((char)buff.get()+""+(char)buff.get()
    System.out.println((char)buff.get()+""+(char)buff.get()+""+(char)buff.get());
    :
position:0	 limit:10
Exception in thread "main" java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:117)
	at com.taobao.moxing.notify.Main.main(Main.java:33)position:2	 limit:10
position:2	 limit:10
position:0	 limit:2
   なぜ を げたのですか? はlimitの でウィンドウがほしいからです. めるデータは のウィンドウで されています.もしこのウィンドウ の は めないなら、ここまであなたと はこれらのパラメータの が かりますよね.
    reset としては、 のpositionを0に します.
     rewindはmarkを-1にリセットし、positionを0にリセットします.
     clear は にリセットして、mark=-1、position=0、limit=capacity(つまり のブザーの )を