java - 如何将二维布尔数组编码为一维数组,然后在java中对其进行解码?
问题描述
我正在使用一维字节数组将 blob 数据存储在 sqlite 数据库中。
我正在寻找一种将二维布尔数组 (boolean [][]) 转换为一维字节数组 (byte[]) 然后再返回的快速而干净的方法。
我可以使用任何外部库和临时数组。
我唯一的想法是将二维数组编码为一维字符串数组,作为外部数组索引,通过破折号或其他唯一符号与值分隔,然后转换为字节(因为这将消除维度不兼容),但是似乎不是最优的。
有没有什么好的、干净的方法来做这个操作?
提前致谢。
解决方案
您的代码中似乎需要某种编码/解码声明。所以如果我是你,我会做这样的事情。
鉴于:
- N维数组[i] [j] [k] ... [n];
- 长度等于维数(N)的二进制数;
想象一下有一个二维数组:
1 2
1 [true] [true]
2 [false] [false]
一维可以从左到右或从右到左编码。例如,我会从右到左。结果数组应该像
[0b01] [0b01]
编码:
class Encoder {
private static final byte START_MASK = 0b01;
public byte[] code(boolean[][] arr) {
int length = arr.length;
byte[] result = new byte[length];
for (int i = 0; i < length; i++) {
byte mask = START_MASK;
for (int j = 0; j < length; j++) {
result[i] = (byte) (result[i] | (arr[j][i] ? mask : 0));
mask = (byte) (mask << 2);
}
}
return result;
}
public boolean[][] decode(byte[] arr) {
int length = arr.length;
boolean[][] result = new boolean[length][length];
for (int i = 0; i < length; i++) {
byte mask = START_MASK;
for (int j = 0; j < length; j++) {
result[j][i] = (mask & arr[i]) == mask;
mask = (byte) (mask << 2);
}
}
return result;
}
}
推荐阅读
- css - 我的粘性侧栏不粘性,它是 flex 的子项,为什么?
- webpack - 从 webpack 5 捆绑库中导入本地模块
- logstash - Retrieve MDC values in logback
- python - 如何使用 Soco 库更新 Sonos 扬声器
- python - 用元组替换空列表
- python - 如何对大量图像增强进行多处理?
- hibernate - 更新 Child 时 Spring Boot JPA AuditAware 未更新父级
- spring - Spring Webflux 中没有组织线程。我必须自己编码吗?
- java - Testng,@AfterMethod 中的并行化错误。Java + Testng + Selenium
- flutter - Android Studio 选项卡前景不会消失