使用 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,并且很想学习。