Я написал следующий код. Из MQ мы получили файл XML в сжатом формате PKZIP. Мы распаковываем этот файл, и после завершения обработки обновленный XML файл будет снова сжат с помощью PKZIP, а затем опубликован sh в MQ. Но мы не хотим создавать здесь какой-либо файл или временный файл. Как мы можем этого добиться? Я написал следующий код, но он использует временный файл.
public static String decompress(byte[] data) {
String decompressedData = null;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
ZipInputStream zipInputStream = new ZipInputStream(byteArrayInputStream);
try {
ZipEntry zipEntry = zipInputStream.getNextEntry();
if (zipEntry != null) {
if (zipEntry.isDirectory()) {
log.error("Error its zipped folder not file {} ", zipEntry.getName());
} else {
File temp = File.createTempFile(File.separator + "tempFile", "");
if (temp != null) {
temp.deleteOnExit();
FileOutputStream fileOutputStream = new FileOutputStream(temp);
byte[] buffer = new byte[BUFFER_SIZE];
int len;
while ((len = zipInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, len);
}
BufferedReader bufferedReader = new BufferedReader(new FileReader(temp));
decompressedData = bufferedReader.lines().collect(Collectors.joining());
if (bufferedReader != null) {
bufferedReader.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
zipInputStream.closeEntry();
}
return decompressedData;
} catch (Exception e) {
log.error("Failed to close zipInputStream {} ", e.getMessage());
return null;
} finally {
try {
if (zipInputStream != null) {
zipInputStream.close();
}
if (byteArrayInputStream != null) {
byteArrayInputStream.close();
}
} catch (IOException e) {
log.error("Failed to close zipOutputStream {}", e.getMessage());
}
}
}
publi c stati c byte [] compress (String messageId, String sr c) {ZipOutputStream zipOutputStream = null;
try {
File temp = File.createTempFile(File.separator + messageId, ".xml");
if (temp != null) {
temp.deleteOnExit();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(temp));
if (bufferedWriter != null) {
bufferedWriter.write(src);
bufferedWriter.close();
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
FileInputStream fileInputStream = new FileInputStream(temp);
zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
byte[] buf = new byte[BUFFER_SIZE];
int len;
zipOutputStream.putNextEntry(new ZipEntry(messageId + ".xml"));
while ((len = fileInputStream.read(buf)) > 0) {
zipOutputStream.write(buf, 0, len);
}
zipOutputStream.closeEntry();
zipOutputStream.finish();
return byteArrayOutputStream.toByteArray();
}
} catch (Exception e) {
log.error("Failed to compress data with an error {} ", e.getMessage());
return null;
} finally {
try {
if (zipOutputStream != null) {
zipOutputStream.close();
}
} catch (IOException e) {
log.error("Failed to close zipOutputStream {}", e.getMessage());
}
}
return null;
}