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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中将二维布尔数组转换为一维字节数组?相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

提前感谢。

答案

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

给出:

  • 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;
    

以上是关于如何在Java中将二维布尔数组转换为一维字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

Java基础知识复习

vue中将数组分割成二维数组[[],[],[]]

java中二维数组和ArrayList的相互转换

如何在java中将字节数组转换为hexString? [复制]

如何在 Java 中将 libGDX 的纹理转换为字节数组并再次返回

如何在java中将4字节数组转换为浮点数