現在、java.util.zip.*パッケージを使用して可逆圧縮/解凍を実行しようとしています。
そして、Apacheのjarを使用して、Base64文字セットで引数として使用される文字列をエンコードおよびデコードしました。
私のコードでは、圧縮用と解凍用の 2 つの静的メソッドを使用しています。
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.zip.*;
import org.apache.commons.codec.binary.Base64;
public class main {
public String compress(String stringToCompress) throws UnsupportedEncodingException
{
//System.out.println("String to Be Compressed :: " + stringToCompress);
byte[] input = Base64.decodeBase64(stringToCompress);
Deflater compressor = new Deflater();
compressor.setInput(input);
compressor.finish();
byte[] output = new byte[100];
compressor.deflate(output);
return Base64.encodeBase64String(output);
}
public String decompressToString(String stringToDecompress) throws UnsupportedEncodingException, DataFormatException
{
//System.out.println("String to be Decompressed :: " + stringToDecompress);
byte[] input = Base64.decodeBase64(stringToDecompress);
Inflater deCompressor = new Inflater();
deCompressor.setInput(input,0,input.length);
byte[] output = new byte[100];
deCompressor.inflate(output);
deCompressor.end();
return Base64.encodeBase64String(output);
}
public static void main(String[] args) throws UnsupportedEncodingException, DataFormatException {
main m = new main();
String strToBeCompressed = "jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla";
String compressedString = m.compress(strToBeCompressed) ;
String deCompressedString = m.decompressToString(compressedString);
System.out.println("Original :: " + strToBeCompressed);
System.out.println("Compressed :: " + compressedString);
System.out.println("decompressed :: " + deCompressedString);
}
}
これが出力です。
Original :: jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhv adjv ajgvoig avigogauguivadfhijbjkla
Compressed :: eJwBPQDC/44Y5LHYYH5I3bH4ZI4Y725ZGo55ZHX5r5ZLI33aL242ornYb2nY72o4L6IoGr4oKIGroLor2nX4Yo245JXcvx/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
decompressed :: jhjksdhgfkjdsfhkjhjvblkajnlkdfmvlksjfdovbjaiudhvadjvajgvoigavigogauguivadfhijbjklQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
出力が表示される場合、元の文字列と解凍された文字列が一致していません。どうしてか分かりません?だれか理由を教えてください。