Base64无法将字符串解码为字节数组

时间:2016-05-26 06:16:33

标签: java string base64 byte lzw

我尝试使用stringBase64解码为字节数组。但它返回了null。这是代码:

    LZW lzw = new LZW();
    String enkripEmbedFileString = Base64.encode(byteFile);
    List<Short> compressed = lzw.compress(enkripEmbedFileString);

    String kompress = "";
    Iterator<Short> compressIterator = compressed.iterator();
    while (compressIterator.hasNext()) {
        String sch = compressIterator.next().toString();
        int in = Integer.parseInt(sch);
        char ch = (char) in;
        kompress = kompress + ch;
    }

    byteFile = Base64.decode(kompress);

我在此代码下面的代码的最后一行调用“byteFile”变量,并抛出NullPointerException。 我检查了“kompress”变量,它不是null。它包含string

您需要知道的是,使用该代码我使用LZW压缩字符串,该字符串需要String for parameter并返回List<Short>。并且,我将List<Short>转换为带有您可以看到的循环的String。

问题是,在使用LZW修改String之后,为什么Base64无法将String转换为byte[]

然而,如果我首先解压缩字符串,然后返回要用Base64转换为byte []的解压缩字符串,则没有问题。有用。这是有效的代码:

    //LZW Compress      
    LZW lzw = new LZW();
    String enkripEmbedFileString = Base64.encode(byteFile);
    List<Short> compressed = lzw.compress(enkripEmbedFileString);

    String kompress = "";
    Iterator<Short> compressIterator = compressed.iterator();
    while (compressIterator.hasNext()) {
        String sch = compressIterator.next().toString();
        int in = Integer.parseInt(sch);
        char ch = (char) in;
        kompress = kompress + ch;
    }

    //Decompress        
    List<Short> kompressback = back(kompress);
    String decompressed = decompress(kompressback);

    byteFile = Base64.decode(decompressed);

请给我一个解释。我的错在哪里?

1 个答案:

答案 0 :(得分:5)

Base64 decode 只能应用于包含Base64 编码数据的字符串。由于您编码然后压缩,结果不是Base64。当您看到解压缩数据时首先允许您解码Base64字符串时,您就自己证明了这一点。