我想用Java存储大量同样大小的大型3D二进制图像。我目前的思考过程是将信息存储在byte []的每个位中。因此,在一个图像的空间中,我可以有效地存储8个图像(每位一个图像)。我有以下循环来获取/设置图像数据。
集
final byte[] storedArray = organData.get(imageNumber);
final short[] binaryArray = getArray(binaryOrgan);
int i=0;
for (short binaryData : binaryArray) {
byte storedData = (byte)storedArray[i];
if (binaryData == 0)
storedData &= ~(1 << bitNumber);
else
storedData |= (1 << bitNumber);
storedArray[i] = storedData;
++i;
}
获取
final byte[] storedArray = organData.get(imageNumber);
final short[] binaryArray = getArray(binaryImage);
int i=0;
for (short storedData : storedArray) {
binaryArray[i] = (short)((storedData >> bitNumber) & 1);
++i;
}
目前这些工作正常,但速度太慢。有没有办法加快速度?例如,只需获取byte []中每个元素的第n位而不迭代byte []?理想情况下,我想在HashMap(我正在使用的)中查找它的速度和它一样快。
PS如果有另一种方法可以有效地存储并快速获取/设置一组二进制图像,我很满意。
答案 0 :(得分:1)
喜欢这样:
private static final int MASKS[] = new int[] {
1, 2, 4, 8, 16, 32, 64, 128};
然后
int imageIndex;
boolean colorSet = (yourByte & MASKS[imageIndex]) != 0;