本文主要对比Java和.NET提供的GZIP压缩功能。简介在本文中,我们将讨论Java和.NET提供的GZIP压缩功能,并使用示例来说明哪种压缩方法更好。在Java中,我们有提供GZIP压缩的GZIPOutputStream类,这个类在java.util.zip包中。在.NET中,我们有执行GZIP压缩的GZipStream类,该类位于System.IO.Compression命名空间下。我在这里谈论的更好的方法是针对小文件,因为我已经检查了小文件的影响,例如,当我们想在发送信息文件之前压缩它们时。代码分析1)JavaGZIPOutputStream类GZIPOutputStream类为压缩数据创建一个GZIP格式文件的输入流。此类具有以下构造函数:1.创建一个具有默认大小的输出流:GZIPOutputStream(OutputStreamout);2.创建一个具有默认缓冲区大小和指定刷新模式的新输出流:GZIPOutputStream(OutputStreamout,booleansyncFlush);3.创建具有指定缓冲区大小的新输出流:GZIPOutputStream(OutputStreamout,intsize);4.创建具有指定缓冲区大小和刷新模式的新输出流:GZIPOutputStream(OutputStreamout,intsize,booleansyncFlush);我们需要编写如下代码来压缩文件::/abhi1.txt";try{FileInputStreamfin=newFileInputStream(srcfile);GZIPOutputStreamfout=newGZIPOutputStream(newFileOutputStream(dstfile));byte[]buffer=newbyte[1024];intbytesRead;while((bytesRead=fin.read(buffer))!=-1)//srcfile.getBytes(){fout.write(buffer,0,bytesRead);}fin.close();fout.close();Filefile=newFile(srcfile);System.out.println("BeforeCompressionfileSize:"+file.length()+"Bytes");Filefile1=newFile(dstfile);System.out.println("AfterCompressionfileSize:"+file1.length()+"Bytes");}catch(Exceptionex){System.out.println(ex);}}}运行代码输出如下,因为我提供的源文件只有481字节大小,然后压缩后输出文件大小为207字节。现在,让我们使用相同的输入文件来查看GZIP压缩的效果。2).NETGZipStream类GZipStream压缩字符串或文件。它允许您有效地保存压缩日志文件、消息文件等数据。此类存在于System.IO.Compression命名空间中。它创建GZIP文件,并将它们写入磁盘。GZipStream类提供以下构造函数:1.使用指定的字节流和压缩级别初始化GZipStream类的新实例:GZipStream(Stream,CompressionLevel)2.使用指定的流初始化GZipStream类的新实例和压缩模式:GZipStream(Stream,CompressionMode)3.使用指定的流和压缩级别初始化GZipStream类的新实例,并可选择打开流:GZipStream(Stream,CompressionLevel,Boolean)4.初始化GZipStream类的新实例GZipStream类通过使用指定的流和压缩模式,并可选地打开流:GZipStream(Stream,CompressionMode,Boolean)我们需要编写以下代码来压缩文件:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.IO;usingSystem.IO.Compression;namespaceCompress{classProgram{staticvoidMain(string[]args){stringsrcfile="D:\\abhi.txt";stringdstfile="D:\\abhi2.txt";byte[]b;using(FileStreamf=newFileStream(srcfile,FileMode.Open)){b=newbyte[f.Length];f.Read(b,0,(int)f.Length);}using(FileStreamfs=newFileStream(dstfile,FileMode.Create))using(GZipStreamgzip=newGZipStream(fs,CompressionMode.Compress,false)){gzip.Write(b,0,b.Length);}FileInfof2=newFileInfo(srcfile);System.Console.WriteLine("SizeOfFileBeforeCompression:"+f2.Length);FileInfof1=newFileInfo(dstfile);System.Console.WriteLine("SizeOfFileBeforeCompression:"+f1.Length);}}运行代码输出如下,因为我提供的源是大小文件481字节,压缩后输出文件大小为353字节,可以看到,源文件为481字节,压缩后文件大小为:.NET的GzipStream:353字节Java的GZIPOutputStream:压缩后为207字节大小差距是显而易见的。所以我们可以得出结论,Java的GZIP压缩比.NET更好。我在使用IKVM.NET研究Java和.NET之间的互操作性时发现的兴趣点。我认为这很有趣,所以我与大家分享。
