Tag: 压缩

Closure编译器选项

我想使用Closure Compiler来缩小/压缩JS代码。 问题是它不会像我期望的那样缩小。 考虑下面的代码。 当我传递字符串 var func = function ( someArgument ) { alert ( someArgument ); return someArgument; } 我希望缩小的代码将“someArgument”重命名为更短的内容,比如“a”。 这是它的方式或我做错了什么? TIA public static void Compress( String src ) { ByteArrayOutputStream err = new ByteArrayOutputStream(); CompilerOptions opt = new CompilerOptions(); CompilationLevel.ADVANCED_OPTIMIZATIONS.setDebugOptionsForCompilationLevel( opt ); Compiler.setLoggingLevel( Level.OFF ); Compiler compiler = new Compiler( new PrintStream( err […]

Android,压缩图像

我通过网络通过wifi或移动网络发送图像以存储在服务器中并再次检索。 我已经做到了,但由于相机拍摄的图像大小,它使我的应用程序变慢,只是指出我打开画廊并从那里拍摄图片而不是直接从应用程序拍照。 我注意到从相机和画廊拍摄的whatsapp图像已被压缩到大约。 100KB。 目前,我的代码获取一个文件并将其转换为字节,然后发送它。 这是获取文件并将其转换为字节的方法。 private void toBytes(String filePath){ try{ File file = new File(filePath); InputStream is = new BufferedInputStream(new FileInputStream(file)); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); bytes = new byte[(int) filePath.length()]; int bytes_read; while((bytes_read = is.read(bytes, 0, bytes.length)) != -1){ buffer.write(bytes, 0, bytes_read); } is.close(); bytes = buffer.toByteArray(); }catch(Exception err){ Toast.makeText(getApplicationContext(), err.toString(), Toast.LENGTH_SHORT).show(); } […]

在Java中压缩用于客户端/服务器传输的字符串

我使用适当的客户端/服务器消息格式,限制我可以通过网络发送的内容。 我无法发送序列化对象,我必须将消息中的数据存储为String。 我发送的数据是以逗号分隔的大值,我想在将数据作为String打包到消息之前压缩数据。 我尝试使用Deflater / Inflater实现这一目标,但是在某个地方,我遇到了困难。 我正在使用以下两种方法进行放气/充气。 但是,将compressString()方法的结果传递给decompressStringMethod()会返回null结果。 public String compressString(String data) { Deflater deflater = new Deflater(); byte[] target = new byte[100]; try { deflater.setInput(data.getBytes(UTF8_CHARSET)); deflater.finish(); int deflateLength = deflater.deflate(target); return new String(target); } catch (UnsupportedEncodingException e) { //TODO } return data; } public String decompressString(String data) { String result = null; try { […]

java:将字符串保存为gzip文件

我是java初学者,我需要这样的东西: String2GzipFile (String file_content, String file_name) String2GzipFile(“Lorem ipsum dolor sit amet, consectetur adipiscing elit.”, “lorem.txt.gz”) 我无法弄清楚如何做到这一点。

Java:创建GZIPInputStream时出错:不是GZIP格式

我正在尝试使用以下Java代码来压缩和解压缩String。 但是,从新的ByteArrayInputStream对象创建新GZipInputStream对象的行会抛出“java.util.zip.ZipException:Not in GZIP format”exception。 有谁知道如何解决这个问题? String orig = “………….”; // compress it ByteArrayOutputStream baostream = new ByteArrayOutputStream(); OutputStream outStream = new GZIPOutputStream(baostream); outStream.write(orig.getBytes()); outStream.close(); String compressedStr = baostream.toString(); // uncompress it InputStream inStream = new GZIPInputStream(new ByteArrayInputStream(compressedStr.getBytes())); ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; int len; while((len = inStream.read(buffer))>0) baoStream2.write(buffer, 0, […]

将Java Deflater / Inflater与自定义字典一起使用会导致IllegalArgumentException

以下代码基于java.util.zip.Deflater的javadocs中给出的示例。 我所做的唯一更改是创建一个名为dict的字节数组,然后使用setDictionary(byte [])方法在Deflater和Inflater实例上设置字典。 我看到的问题是,当我用与Deflater完全相同的数组调用Inflater.setDictionary()时,我得到一个IllegalArgumentException。 这是有问题的代码: import java.util.zip.Deflater; import java.util.zip.Inflater; public class DeflateWithDictionary { public static void main(String[] args) throws Exception { String inputString = “blahblahblahblahblah??”; byte[] input = inputString.getBytes(“UTF-8”); byte[] dict = “blah”.getBytes(“UTF-8”); // Compress the bytes byte[] output = new byte[100]; Deflater compresser = new Deflater(); compresser.setInput(input); compresser.setDictionary(dict); compresser.finish(); int compressedDataLength = compresser.deflate(output); // […]

通过Java生成tar文件

我想使用Java将文件夹压缩为tar文件(以编程方式)。 我认为必须有一个开源或库来实现它。 但是,我找不到这样的方法。 或者,我可以制作一个zip文件并将其扩展名重命名为.tar吗? 有人可以建议图书馆这样做吗? 谢谢!

如何轻松地将字符串压缩和解压缩到字节数组?

我有一些字符串,每个字符串大约10K字符。 它们有很多重复。 它们是序列化的JSON对象。 我想轻松地将它们压缩成字节数组,并从字节数组中解压缩它们。 我怎样才能最轻松地做到这一点? 我正在寻找方法,所以我可以做到以下几点: String original = “….long string here with 10K characters…”; byte[] compressed = StringCompressor.compress(original); String decompressed = StringCompressor.decompress(compressed); assert(original.equals(decompressed);

如何有效地预测数据是否可压缩

我想编写一个存储后端来存储更大的数据块。 数据可以是任何东西,但它主要是二进制文件(图像,pdf,jar文件)或文本文件(xml,jsp,js,html,java …)。 我发现大部分数据已经被压缩了。 如果所有内容都已压缩,则可以节省大约15%的磁盘空间。 我正在寻找最有效的算法,可以高概率地预测一块数据(比如说128 KB)是否可以被压缩(无损压缩),而不必在可能的情况下查看所有数据。 压缩算法将是LZF,Deflate或类似的东西(可能是Google Snappy)。 因此,预测数据是否可压缩应该比压缩数据本身快得多,并且使用更少的内存。 我已经知道的算法: 尝试压缩数据的一个子集,比方说128个字节(这有点慢) 计算128个字节的总和,如果它在一定范围内,则它可能不可压缩(在128 * 127的10%范围内)(这很快,而且相对较好,但我正在寻找更可靠的东西,因为算法实际上只查看每个字节的最高位) 查看文件头(相对可靠,但感觉像作弊) 我想一般的想法是我需要一种能够快速计算字节列表中每个位的概率是否大约为0.5的算法。 更新 我实现了’ASCII检查’,’熵计算’和’简化压缩’,并且都给出了很好的结果。 我想改进算法,现在我的想法是不仅要预测数据是否可以被压缩,还要预测它可以被压缩多少 。 可能使用算法的组合。 现在,如果我只能接受多个答案……我会接受给出最佳结果的答案。 其他答案(新想法)仍然欢迎! 如果可能,使用源代码或链接:-) 更新2 现在在Linux中实现了类似的方法。

如何使用Java压缩PNG图像

嗨,我想知道Java中是否有任何方法可以减少作为BufferedImage加载的图像大小(使用任何类型的压缩),并将保存为PNG。 也许某种png imagewriteparam? 我没有找到任何有用的东西,所以我卡住了。 下面是一个示例如何加载和保存图像 public static BufferedImage load(String imageUrl) { Image image = new ImageIcon(imageUrl).getImage(); bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics2D g2D = bufferedImage.createGraphics(); g2D.drawImage(image, 0, 0, null); return bufferedImage; } public static void storeImageAsPng(BufferedImage image, String imageUrl) throws IOException { ImageIO.write(image, “png”, new File(imageUrl)); }