- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 jpountz LZ4 尝试压缩文件,我想使用 Java 文件输入和输出流读入和输出文件。我试图在网上找到解决方案,但一无所获,我发现了一个关于如何正确实现 LZ4 的先前 stackoverflow 问题,我已经接受并尝试修改它以使用流,但我不确定这是否是正确或者它是否有效。
在文本文件上运行压缩时,它会输出一个缺少某些字符或用符号替换的文件
ð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;
}
最佳答案
所以我通过使用 LZ4block 输入/输出流解决了我的问题
public static void LZ4compress(String filename, String lz4file){
byte[] buf = new byte[2048];
try {
String outFilename = lz4file;
LZ4BlockOutputStream out = new LZ4BlockOutputStream(new FileOutputStream(outFilename), 32*1024*1024);
FileInputStream in = new FileInputStream(filename);
int len;
while((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
} catch (IOException e) {
}
}
public static void LZ4Uncompress(String lz4file, String filename){
byte[] buf = new byte[2048];
try {
String outFilename = filename;
LZ4BlockInputStream in = new LZ4BlockInputStream(new FileInputStream(lz4file));
FileOutputStream out = new FileOutputStream(outFilename);
int len;
while((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
} catch (IOException e) {
}
}
关于使用输入/输出流的 Java LZ4 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012183/
我正在使用 crc32(initial_crc_value,data,data_length); 生成一个 crc32 值。如果我没有在链接器选项中使用 -lz,我将收到链接器错误 "undefine
我正在尝试弄清楚如何证明用于压缩的 Lempel ZIV 77 算法确实提供了最佳压缩。 我找到了以下信息: So how well does the Lempel-Ziv algorithm wor
LZ-string 的哪种类型的 mysql 数据压缩结果?在我的数据库中,此变量为 MEDIUMTEXT 类型和排序规则 UTF8bin。使用post方法(asp.net core web serv
对于 xcode 中的其他链接器标志,-lz 意味着什么。我经常看到它与 -Objc 一起使用,或者它也可以独立使用吗?它的用途是什么?我正在使用 xcode 7.0.0 最佳答案 @Mozilla
我有兴趣实现用于压缩 ECG 信号的 LZ 算法,并希望优化与微 Controller 相关的代码。 这样压缩和解压缩 ECG 信号的熵效率更高,花费的时间更少。我完全不知道我是如何实现这一目标的。我
我正在尝试使用 quickfix 库编译代码: g++ -o main tradeclient.cpp Application.cpp -std=c++11 -fexceptions -finline
error: Ld /Users/mymac/Library/Developer/Xcode/DerivedData/Fitness-drawjjdksjmgttbwvhjuzicescoz/Buil
这让我发疯,当我尝试在模拟器上编译时,一切正常,但在设备上我遇到了这个错误: ld: library not found for -lz Command /Developer/Platforms/iP
我正在尝试在 Ubuntu 10.04 下编译 Android 源代码。我收到一条错误消息, /usr/bin/ld: cannot find -lz 你能告诉我如何解决它吗? cannot find
您好,我想在我的项目中使用 Google Maps API,我已经添加了 libz.dylib。当我在其他链接器标志中编写 -ObjC 以链接 Google Maps API 时,它工作正常但是当我删
我需要计算二进制字符串的 LZ 复杂度。 LZ 复杂度是从头到尾查看流时遇到的差异子串的数量。例如: s = 1001111011000010 在不同子串中标记序列复杂度c(s) = 6:s = 1/
在 ubuntu-13.04 上,使用 linux 发行版提供的 GCC-4.7.3 从共享库构建可执行文件时出现错误。 我猜问题出在libpng和zlib之间(前者使用后者),但我不知道为什么。 首
我知道这些是一些常见/基本的库,但它们到底是什么意思? 例如,我知道 -lm是一些数学库,但这是标准数学库还是什么? -lz压缩?什么压缩? 我不知道 -lrt 是什么是。 这些是什么东西? 数学库。
我想安装 uwsgi 但我无法安装。它是 Fedora 18 64 位系统。 python 是 2.7 版,yum install zlib 说:Package zlib-1.2.7-9.fc18.x
如果我解压缩 initrd.lz 然后重新打包而不做任何更改,然后将它替换为 Casper 目录中的新 initrd.lz for live CD。它是结构化的。在打包 initrd 时,我收到如下警
我按此顺序链接 CodeBlocks 中的库, -lz -L/usr/local/lib -L/usr/local/include -pthread -lswscale -lavutil -lavco
我不明白我的错误: LdLibrary/Developer/Xcode/DerivedData/Test-aywxyvnakaqhmwfbwellynwqmoik/Build/Products/Deb
我正在使用 lz-string.js 的 LZString.compressToBase64 函数并且需要在服务器端对数据进行解压/压缩。 明显的解决方案似乎是 lz_string_csharp但我很
尝试为 iOS 5 编译软件时,XCode 4.2 抛出错误: ld: library not found for -lz.1.2.3 我发现这篇文章告诉我要替换 1.2.3。与 1.2.5 http
我正在尝试从源代码“openssl-1.0.1j”进行编译,但失败并显示消息: “/usr/bin/ld: 找不到 -lz” 树莓派上的环境是 debian wheezy。 我的文件树: ├── zl
我是一名优秀的程序员,十分优秀!