我正在使用jpountz LZ4來嘗試壓縮文件,並且我想使用Java文件輸入和輸出流讀入和輸出文件。我試圖找到一個在線解決方案,但沒有什麼,我發現了一個關於如何正確實現LZ4的前一個stackoverflow問題,我已經採取了並試圖修改它以使用流,但我不確定這是否正確的或者它是否正在工作。使用輸入/輸出流的Java LZ4壓縮
當運行上的文本文件的壓縮它輸出具有某些字符丟失或與符號
ðHello world Heðo world Hello ðrld Hello worlðHello worl
但具有圖像運行時,它的文件就引發出界錯誤的替換的文件。我也一直無法解壓縮,因爲它會拋出輸入緩衝區的錯誤解碼偏移量3。
這裏是我的代碼任何幫助,將不勝感激感謝
public void LZ4Compress(InputStream in, OutputStream out){
int noBytesRead = 0; //number of bytes read from input
int noBytesProcessed = 0; //number of bytes processed
try {
while ((noBytesRead = in.read(inputBuffer)) >= 0) {
noBytesProcessed = inputBuffer.length;
decompressedLength = inputBuffer.length;
outputBuffer = compress(inputBuffer, decompressedLength);
out.write(outputBuffer, 0, noBytesRead);
}
out.flush();
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void LZ4decompress(InputStream in, OutputStream out){
int noBytesRead = 0; //number of bytes read from input
try {
while((noBytesRead = in.read(inputBuffer)) >= 0){
noBytesProcessed = inputBuffer.length;
outputBuffer = decompress(inputBuffer);
out.write(outputBuffer, 0, noBytesRead);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static byte[] compress(byte[] src, int srcLen) {
decompressedLength = srcLen;
int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
byte[] compressed = new byte[maxCompressedLength];
int compressLen = compressor.compress(src, 0, decompressedLength, compressed, 0, maxCompressedLength);
byte[] finalCompressedArray = Arrays.copyOf(compressed, compressLen);
return finalCompressedArray;
}
private static LZ4SafeDecompressor decompressor = factory.safeDecompressor();
public static byte[] decompress(byte[] finalCompressedArray) {
byte[] restored = new byte[finalCompressedArray.length];
restored = decompressor.decompress(finalCompressedArray, finalCompressedArray.length);
return restored;
}
@ user3758298-我有一個查詢就像如果我不知道解壓縮數組的長度,然後我應該如何解壓縮的字節數組?我有一個壓縮的字節數組。我想解壓縮它。 – kit