背景
位输入流由字节数组支持。有一些方法可以从该字节数组中读取到各种强制原始数组中。
问题
有重复的代码。Java 缺乏原始类型的泛型,因此重复可能是不可避免的。
代码
重复代码在以下方法中很明显:
@Override
public long readBytes(final byte[] out, final int offset, final int count, final int bits) {
final int total = offset + count;
assert out != null;
assert total <= out.length;
final long startPosition = position();
for (int i = offset; i < total; i++) {
out[i] = readByte(bits);
}
return position() - startPosition;
}
@Override
public long readShorts(final short[] out, final int offset, final int count, final int bits) {
final int total = offset + count;
assert out != null;
assert total <= out.length;
final long startPosition = position();
for (int i = offset; i < total; i++) {
out[i] = readShort(bits);
}
return position() - startPosition;
}
请注意如何final byte[] out
与 相关readByte(bits)
与final short[] out
相关readShort(bits)
。这些关系是问题的症结所在。
问题
怎样才能消除重复,如果有的话,又不会对性能造成重大影响(例如,通过自动装箱)?