Я пытаюсь сжать строку. Я использую кодировку и декодирование Base64 для преобразования String в Bytes и наоборот.Сжатие и кодирование Неправильные результаты в строках
import org.apache.axis.encoding.Base64;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
public class UtilTesting {
public static void main(String[] args) {
try {
String original = "I am the god";
System.out.println("Starting Zlib");
System.out.println("==================================");
String zcompressed = compressString(original);
String zdecompressed = decompressString(zcompressed);
System.out.println("Original String: "+original);
System.out.println("Compressed String: "+zcompressed);
System.out.println("Decompressed String: "+zdecompressed);
} catch (IOException e) {
e.printStackTrace();
}
public static String compressString(String uncompressedString){
String compressedString = null;
byte[] bytes = Base64.decode(uncompressedString);
try {
bytes = compressBytes(bytes);
compressedString = Base64.encode(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return compressedString;
}
public static String decompressString(String compressedString){
String decompressedString = null;
byte[] bytes = Base64.decode(compressedString);
try {
bytes = decompressBytes(bytes);
decompressedString = Base64.encode(bytes);
} catch (IOException e) {
e.printStackTrace();
} catch (DataFormatException e) {
e.printStackTrace();
}
return decompressedString;
}
public static byte[] compressBytes(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 output;
}
public static byte[] decompressBytes(byte[] data) throws IOException, DataFormatException {
Inflater inflater = new Inflater();
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 output;
}
}
Это дает результат:
Starting Zlib
==================================
Original String: I am the god
Compressed String: eJxTXLm29YUGAApUAw0=
Decompressed String: Iamthego
Как вы можете видеть, что не хватает белых-пространства и даже потеряли последнее письмо в данной строке.
Может кто-нибудь, пожалуйста, сообщите, что не так с этим кодом. Я следую следующие шаги:
- Decode
- компресс
- шифровать
- сохранить
- получить
- расшифровывает
- распаковка
- закодировать.
Пожалуйста, помогите. Спасибо.
'новый ByteArrayOutputStream (data.length)' => Если вы распаковку данных, может быть, вам нужен больший буфер, чем вход. –
@AndyTurner Увеличил его 10 раз, не имел никакого значения. любое представление о белых пространствах? –
Я очень подозрительно отношусь к вашему первоначальному вызову 'Base64.decode' в' compressString' - вы не проходите в кодировке Base64. Если бы я должен был догадаться, я бы сказал, что это место, где пробелы разделены. –