簡単にString
分解できますbyte[]
String s = "my string";
byte[] b = s.getBytes();
System.out.println(new String(b)); // my string
ただし、圧縮が関係する場合、いくつかの問題があるようです。2 つのメソッドがあるとしますcompress
(uncompress
以下のコードは正常に動作します)。
public static byte[] compress(String data)
throws UnsupportedEncodingException, IOException {
byte[] input = data.getBytes("UTF-8");
Deflater df = new Deflater();
df.setLevel(Deflater.BEST_COMPRESSION);
df.setInput(input);
ByteArrayOutputStream baos = new ByteArrayOutputStream(input.length);
df.finish();
byte[] buff = new byte[1024];
while (!df.finished()) {
int count = df.deflate(buff);
baos.write(buff, 0, count);
}
baos.close();
byte[] output = baos.toByteArray();
return output;
}
public static String uncompress(byte[] input)
throws UnsupportedEncodingException, IOException,
DataFormatException {
Inflater ifl = new Inflater();
ifl.setInput(input);
ByteArrayOutputStream baos = new ByteArrayOutputStream(input.length);
byte[] buff = new byte[1024];
while (!ifl.finished()) {
int count = ifl.inflate(buff);
baos.write(buff, 0, count);
}
baos.close();
byte[] output = baos.toByteArray();
return new String(output);
}
私のテストは次のように機能します(正常に動作します)
String text = "some text";
byte[] bytes = Compressor.compress(text);
assertEquals(Compressor.uncompress(bytes), text); // works
それ以外の理由ではありませんが、最初のメソッドを変更して、String
代わりにa を返すようにしたいと思いますbyte[].
だから私return new String(output)
はcompress
メソッドから私のテストを次のように変更します:
String text = "some text";
String compressedText = Compressor.compress(text);
assertEquals(Compressor.uncompress(compressedText.getBytes), text); //fails
このテストは失敗しますjava.util.zip.DataFormatException: incorrect header check
何故ですか?それを機能させるために何をする必要がありますか?