ByteBufferのお話

こないだライフゲームのライブ壁紙を作ってみたんだけど、
最近はNDKを使って、省バッテリー化に取り組みたいなーって思ってて、
そのためにはByteBufferを使う必要がありまして。

という訳で、いきなりNDKのお話をする前にByteBufferの勉強をします。
ByteBufferは、java.nio.Bufferを継承したものなので、
まずはjava.nio.Bufferを確認しなきゃいけなくて、
なんでこんなことを書いているかというと、
お察しの通り、これを確認しないで使ってハマった訳です。

で、注意しなきゃいけない点は以下の通り

  • put()するとposition()が変わる
  • position()が変わると次のput()先が変わる

うまく説明できないので、C言語で説明します。

unsigned char buf[3] = { 0, 0, 0 };
unsigned char *p = buf;

// put()による書き換えのイメージ
(*p++) = 1; // buf[0] => 1
(*p++) = 2; // buf[1] => 2
(*p++) = 3; // buf[2] => 3

という訳で、バッファの先頭から書き換えたい場合はrewind()を呼び出して、
position()を巻き戻しましょう。

おしまい。

Leave a Comment