Android Profilerツールを使用していると、コードのパフォーマンスが重要な領域で大量のByteBufferを使用していることがわかりました。私は可能な限り最大のパフォーマンスヒットの最適化に取り組んできました(まだループ最適化のようなものに行くことを余儀なくされていません)、そしてByteBufferコードはそれが別の/より良い解決策に簡単に置き換えることができるように見えます。
問題:ByteBufferストリームにある4つの連続したバイトからintを取得します。これは、任意の長さで、現在(以下で、具体的には// <<<パーツを参照)一時ByteBufferで実行され、intを形成するために必要なバイトを取得します。もっと簡単なプロセスはありますか?
private int peekStreamData(ByteBuffer stream, int count) {
int data = 0;
int stream_field = streamField;
int stream_field_bit_index = streamFieldBitIndex;
byte[] streamArr = stream.array();
ByteBuffer bb = ByteBuffer.allocate(4);
while (count > (32 - stream_field_bit_index) && streamIndex < (imageStream.capacity() >> 2)) {
data = (data << (32 - stream_field_bit_index)) | ( stream_field >>> stream_field_bit_index);
count -= 32 - stream_field_bit_index;
bb.put(0,streamArr[streamIndex * 4 + 3]); //<<<
bb.put(1,streamArr[streamIndex * 4 + 2]); //<<<
bb.put(2,streamArr[streamIndex * 4 + 1]); //<<<
bb.put(3,streamArr[streamIndex * 4 + 0]); //<<<
stream_field = bb.getInt(); //<<<
stream_field_bit_index = 0;
}
if (count > 0)
data = (data << count) | (stream_field >>> (32 - count));
return data;//data;
}
間違いがあればお気軽にご指摘ください。私はごく最近までByteBuffersを使ったことがなく、学びたいと思っています。