如何在Java中将二维布尔数组转换为一维字节数组?

问题描述 投票:0回答:1

我正在使用一维字节数组将斑点数据存储在sqlite数据库上。

[我正在寻找一种将二维布尔数组(boolean [] [])转换为一维字节数组(byte [])然后返回的快速,干净的方法。

我可以使用任何外部库和临时数组。

我唯一的想法是将2D数组编码为1D字符串数组,将外部数组索引与该值之间用破折号或其他唯一符号分隔,然后转换为字节(这样可以消除尺寸不兼容),但这似乎不是最佳选择。

是否有任何好的,干净的方法可以执行此操作?

提前感谢。

java arrays multidimensional-array boolean
1个回答
0
投票

似乎您的代码中需要某种编码/解码声明。所以,如果我是你,我会做这样的事情。

给出:

  • N维数组[i] [j] [k] ... [n];
  • 长度等于维数(N)的二进制数;

想象一下具有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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.