我正在使用一维字节数组将斑点数据存储在sqlite数据库上。
[我正在寻找一种将二维布尔数组(boolean [] [])转换为一维字节数组(byte [])然后返回的快速,干净的方法。
我可以使用任何外部库和临时数组。
我唯一的想法是将2D数组编码为1D字符串数组,将外部数组索引与该值之间用破折号或其他唯一符号分隔,然后转换为字节(这样可以消除尺寸不兼容),但这似乎不是最佳选择。
是否有任何好的,干净的方法可以执行此操作?
提前感谢。
似乎您的代码中需要某种编码/解码声明。所以,如果我是你,我会做这样的事情。
给出:
想象一下具有2D数组:
1 2
1 [true] [true]
2 [false] [false]
一个维度可以从左到右或从右到左编码。例如,我会从右到左。结果数组应类似于
[0b01] [0b01]
代码:
public class Coder {
private static final byte FIRST_DIMENSION_MASK = 0b01;
private static final byte SECOND_DIMENSION_MASK = 0b10;
private byte[] code(boolean[][] arr) {
int length = arr.length;
byte[] result = new byte[length];
for (int i = 0; i < length; i++) {
result[i] = ((byte) ((arr[0][i] ? FIRST_DIMENSION_MASK : 0b00) | (arr[1][i] ? SECOND_DIMENSION_MASK : 0b00)));
}
return result;
}
private boolean[][] decode(byte[] arr) {
int length = arr.length;
boolean[][] result = new boolean[length][length];
for (int i = 0; i < length; i++) {
result[0][i] = (FIRST_DIMENSION_MASK & arr[i]) == FIRST_DIMENSION_MASK;
result[1][i] = (SECOND_DIMENSION_MASK & arr[i]) == SECOND_DIMENSION_MASK;
}
return result;
}
}