JavaにByteBufferなるものがあることを知り、byte[]でわざわざ受信データが来るたびにnewし直して、System.arraycopy()で連結して、という手間が省けそうだと思って使ってみた。
が、何か、何かピンとこないのだ。
なんでだろう?
たぶん、get()してもput()してもposition()が動くからじゃなかろうか。
ポインタが1つしかないから、自分で「今は書込むだけ」とか「今は読込むだけ」とか決めておくか、別変数で位置を管理するなどしないといかんだろう。
今の使い方だと、受信データが来たらput()で追加していき、読む方はarray()で配列を取ってきて、読込み済みの位置を自分で管理、なのかな。
あと、array()したときに取得できるのがcapacityの分までなので、limit()のところまで切り取りたいときには、新たにbyte[]でほしい分だけnewした後にSystem.arraycopy()とかでコピーすることになりそうだ。
get()だと、positionが動いてしまうから、書込みメインで使うとそうなるんじゃなかろうか。
戻り値としてByteBufferを返すときには、positionを0に、limitをデータの終わりまでにしていたのだが、こういうときにflip()が使えるんだな(ネットで調べた)。
今は、
bb.position(0);
bb.limit(bbArray.length);
みたいにしていたのだ。
でも、メソッドでやらなくてもいいなら、こっちの方がわかりやすい気がするけど、うーん、どうなんだろう?
ひとまず、書込みと読込を並行して行うような使い方はしない、ということさえわかればなんとかなりそうだ。
ただ、こういうのに向いたclassがあるんじゃなかろうか、という気がしなくもない。
それを探し続ける時間もないから今回はByteBufferにするけど、環境が優雅になったらなったで悩みが出てくるものですな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。