2016-05-26 10 views
2

をバイトにStringをデコードに失敗しました。しかし、それはnullを返しました。ここでは、コードは次のとおりです。Base64では、私は<code>Base64</code>を使用してバイト配列に<code>string</code>をデコードしようとしたアレイ

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で文字列を圧縮し、List<Short>を返すコードで、です。そして、私はList<Short>を見ることができるループのある文字列に変換します。

なぜ、Base64がStringbyte[]に変換できなかったのですか?その文字列はLZWで変更されたのですか? Iは、第1及びより文字列を解凍[]のバイトにはBase64で変換する解凍ストリングを返す場合

が、一方、問題はありません。できます。以下は動作するコードです:

//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

Base64デコーダに入力されている文字列を調べましたか?それは有効なBase64ですか? –

+0

Base64はBase64でエンコードされたStringのみをデコードできますか? –

+1

それは論理的です、はい。以前のBase64 _encode_の出力ではない文字列にBase64 _decode_を適用しようとした結果、どのような結果が予想されますか?それは意味をなさないでしょう。 –

答えて

5

Base64でデコードのみBase64で符号化データを含む文字列に適用することができます。エンコードして圧縮するので、結果はBase64ではありません。最初にデータを圧縮解除すると、Base64文字列をデコードすることができます。

関連する問題