Java 中等效的 Inflate for Deflate 函数
Equivalent Inflate for Deflate function in Java
我在Java中有一个解压功能。我想要相同的压缩功能。现在我的 deflate 函数给出了完全不同的输出。功能如下:
public static String compress(byte[] data) throws IOException {
Deflater deflater = new Deflater();
deflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer); // returns the generated code... index
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(Base64.getEncoder().encode(output));
}
public static String decompress(byte[] data) throws IOException, DataFormatException {
Inflater inflater = new Inflater(true);
inflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
byte[] buffer = new byte[1024];
while (!inflater.finished()) {
int count = inflater.inflate(buffer);
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(output);
}
使用 "LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg/EZ2iS61QtkbKuJeR5woz59FBWhduLw==" 的解压缩功能得到 "DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d"
但是在压缩函数中使用 "DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d" 得到 "eJwtyskJgDAQQNFWUoHOYmac3AQvHgRbyFrFFG8Q4V8+vPO5JJqY60q2EqAFpAQwC8ftCOoMtqg4TsLwk0SUSD8RnaJLrVC2Rsq4l5HnCjPn0UFaF24vAkwaGg==" 但我希望压缩得到相同的结果。
我不想改变我的解压功能,因为它在其他地方被广泛使用。
我正在使用这些功能如下:
public static void main(String[] args)
{
try{
//Compress Block
String strTocompress="DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d";
byte[] bytes = strTocompress.getBytes("ASCII");
String encoded = compress(bytes);
System.out.println(encoded);
//End of Compress Block
//***********Decompress Block**************
String strToDecompress="LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg/EZ2iS61QtkbKuJeR5woz59FBWhduLw==";
byte[] bytes1 = Base64.getDecoder().decode(strToDecompress.getBytes());
String decoded = decompress(bytes1);
System.out.println(decoded);
//End of Decompress Block
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
@Kartikeya
您需要更换 Deflater deflater = new Deflater();
符合
Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true);
在你的压缩函数中。
public static String compress(byte[] data) throws IOException {
Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true);
deflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer); // returns the generated code... index
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(Base64.getEncoder().encode(output));
}
String s = "hello";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Deflater compresser = new Deflater(Deflater.BEST_COMPRESSION, true);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(stream,
compresser);
deflaterOutputStream.write(s.getBytes());
deflaterOutputStream.close();
byte[] output= new Base64().encode(stream.toByteArray());
String re1 = new String(output);
我在Java中有一个解压功能。我想要相同的压缩功能。现在我的 deflate 函数给出了完全不同的输出。功能如下:
public static String compress(byte[] data) throws IOException {
Deflater deflater = new Deflater();
deflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer); // returns the generated code... index
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(Base64.getEncoder().encode(output));
}
public static String decompress(byte[] data) throws IOException, DataFormatException {
Inflater inflater = new Inflater(true);
inflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
byte[] buffer = new byte[1024];
while (!inflater.finished()) {
int count = inflater.inflate(buffer);
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(output);
}
使用 "LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg/EZ2iS61QtkbKuJeR5woz59FBWhduLw==" 的解压缩功能得到 "DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d"
但是在压缩函数中使用 "DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d" 得到 "eJwtyskJgDAQQNFWUoHOYmac3AQvHgRbyFrFFG8Q4V8+vPO5JJqY60q2EqAFpAQwC8ftCOoMtqg4TsLwk0SUSD8RnaJLrVC2Rsq4l5HnCjPn0UFaF24vAkwaGg==" 但我希望压缩得到相同的结果。
我不想改变我的解压功能,因为它在其他地方被广泛使用。
我正在使用这些功能如下:
public static void main(String[] args)
{
try{
//Compress Block
String strTocompress="DPI65969|7/29/2019 12:00:00 AM|107|309.76|1|7/30/2019 1:22:27 AM|15|25|6cc0b4d27318bfa6cc6333afe06de63d";
byte[] bytes = strTocompress.getBytes("ASCII");
String encoded = compress(bytes);
System.out.println(encoded);
//End of Compress Block
//***********Decompress Block**************
String strToDecompress="LcrJCYAwEEDRVlKBzmJmnNwELx4EW8haxRRvEOFfPrzzuSSamOtKthKgBaQEMAvH7QjqDLaoOE7C8JNElEg/EZ2iS61QtkbKuJeR5woz59FBWhduLw==";
byte[] bytes1 = Base64.getDecoder().decode(strToDecompress.getBytes());
String decoded = decompress(bytes1);
System.out.println(decoded);
//End of Decompress Block
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
@Kartikeya 您需要更换 Deflater deflater = new Deflater(); 符合 Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true); 在你的压缩函数中。
public static String compress(byte[] data) throws IOException {
Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,true);
deflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer); // returns the generated code... index
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
return new String(Base64.getEncoder().encode(output));
}
String s = "hello";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Deflater compresser = new Deflater(Deflater.BEST_COMPRESSION, true);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(stream,
compresser);
deflaterOutputStream.write(s.getBytes());
deflaterOutputStream.close();
byte[] output= new Base64().encode(stream.toByteArray());
String re1 = new String(output);