java - Java中数组空间被重用?

标签 java arrays

我有以下循环(解密程序的一部分):

for(int i=0; i < inputd.length; i++){
        byte[] blockd = this.fromHex(inputd[i]);
        byte[] pt = cipher.doFinal(blockd); // Problem?

        if(plainText == null)
            plainText = new String(pt);
        else
            plainText+=new String(pt);
}

在标记语句中,cipher.doFinal(blockd)返回不同大小的数组。问题是,如果在大小为 30 的迭代数组中返回,而在下一次迭代中返回 25(较小),则赋值将替换前 25 个字符,并且上一次迭代的最后 5 个字符仍在数组中。

这是fromHex()函数:

    private byte[] fromHex(String b){
            byte[] bt = (new BigInteger(b, 16)).toByteArray();
            if(bt.length > 64){
                bt = Arrays.copyOfRange(bt, 1, 65);
            }
            return bt;
    }

我该如何解决这个问题?在循环结束之前将 null 分配给两者没有帮助。

最佳答案

由于每次迭代中都会创建 byte[]pt 的新实例,因此无需担心此数组之前的大小。
尝试使用此方法转换十六进制。字符串到字节数组

private byte[] toBytes(String s)
{
    int len = s.length();     
    byte[] data = new byte[len / 2];     
    for (int i = 0; i < len; i += 2) 
    {         
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)+ Character.digit(s.charAt(i+1), 16));     
    }     
    return data; 
}

关于java - Java中数组空间被重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15727417/

相关文章:

java - 如何在JAVA中使用Google-Drive-SDK直接登录?

java - LatLng GPS 位置的 NullPointerException

Java 在单独的行上打印数据库记录

c++ - 使用指针创建函数

python - 取 numpy 数组中列的平均值

Python-检查二维数组中的多个项目

arrays - Swift 和 NSCoding : Encoding an array of objects conforming to a class-only protocol

java - Java 编译器可以优化循环以提早返回吗?

java - 将数组中的所有零移至前面或后面

C++ 字符数组未通过管道直接读取