【发布时间】:2011-03-29 20:06:03
【问题描述】:
我想在 Java 中存储大量大小相同的大型 3D 二进制图像。我目前的思考过程是将信息存储在字节 [] 的每一位中。因此,在一张图像的空间中,我可以有效地存储 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 如果有另一种方法可以有效地存储和快速获取/设置一组二进制图像,我会全力以赴。
【问题讨论】:
-
您能否解释一下“与在 HashMap 中查找一样快”的意思?
-
在我的应用程序过程中,我必须实时访问这些图像。 HashMap 允许我这样做。如果从 byte[] 到 vtkImageData 的转换不是实时的,那么这将不起作用。