Распакуйте Gzip файл и сохраните в переменной
Я много искал для преобразования из байта в строку, но мой запрос немного отличается, пожалуйста, читайте дальше.
В настоящее время у меня есть файл gzip, который я могу распаковать, используя код с http://www.mkyong.com/java/how-to-decompress-file-from-gzip-file/. Этот код помогает мне сохранить распакованный вывод в файле, но как мне сохранить его в переменной? Я использую этот код в настоящее время:
public String unGunzipFile(String compressedFile, String decompressedFile) {
byte[] buffer = new byte[1024];
try {
FileInputStream fileIn = new FileInputStream(compressedFile);
GZIPInputStream gZIPInputStream = new GZIPInputStream(fileIn);
FileOutputStream fileOutputStream = new FileOutputStream(decompressedFile);
StringBuffer str = new StringBuffer();
int bytes_read;
while ((bytes_read = gZIPInputStream.read(buffer)) > 0) {
String s = new String(buffer);
str.append(s);
fileOutputStream.write(buffer, 0, bytes_read);
}
gZIPInputStream.close();
fileOutputStream.close();
System.out.println("The file was decompressed successfully!");
System.out.println(str);
String final_string = str.toString();
return final_string;
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
}
Так как я конвертирую байты в строку ближе к концу, когда bytes_read
не 1024 в длину, я получаю некоторые странные данные в моем StringBuffer, но в файле нет таких данных, так как fileOutputStream.write(buffer, 0, bytes_read);
ограничивается написанием обновленной части. Как это исправить?
Заранее спасибо.
2 ответа
Использовать String(byte[] bytes, int offset, int length)
конструктор, который позволяет указать длину для преобразования. т.е.
String s = new String(buffer, 0, bytes_read)
Вместо использования String s = new String(buffer), я предлагаю использовать
public String(byte[] bytes, int offset, int length)
что может помочь вам.