gpt4 book ai didi

Java:高效存储 boolean 值[32]?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:07 25 4
gpt4 key购买 nike

在 Java 中,我想将长度为 32 的 boolean 值 (boolean[]) 数组存储 (>10'000) 到磁盘,稍后再次读取它们以进行进一步计算和比较。

由于单个数组的长度为 32,我想知道将其存储为整数值以加快读写速度(在 32 位机器上)是否有意义。您会建议使用 BitSet 然后转换为 int 吗?或者甚至忘记 int 并使用字节?

最佳答案

对于二进制存储,使用int 和一个DataOutputStream(DataInputStream 用于读取)。

我认为 boolean 数组在 Java 内部存储为 byte 或 int 数组,因此您可能需要考虑避免开销并始终保持 int 编码,即根本不使用 boolean[]。

相反,有类似的东西

public class BooleanArray32 {
private int values;

public boolean get(int pos) {
return (values & (1 << pos)) != 0;
}

public void set(int pos, boolean value) {
int mask = 1 << pos;
values = (values & ~mask) | (value ? mask : 0);
}

public void write(DataOutputStream dos) throws IOException {
dos.writeInt(values);
}

public void read(DataInputStream dis) throws IOException {
values = dis.readInt();
}

public int compare(BooleanArray32 b2) {
return countBits(b2.values & values);
}

// From http://graphics.stanford.edu/~seander/bithacks.html
// Disclaimer: I did not fully double check whether this works for Java's signed ints
public static int countBits(int v) {
v = v - ((v >>> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >>> 2) & 0x33333333); // temp
return ((v + (v >>> 4) & 0xF0F0F0F) * 0x1010101) >>> 24;
}
}

关于Java:高效存储 boolean 值[32]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com