Tag: 压缩

从字节数组中创建新的FileStream

我试图从字节数组创建一个新的FileStream对象。 我确信根本没有任何意义,所以我将在下面进一步详细解释。 我正在完成的任务:1)读取先前压缩的源文件2)使用GZipStream解压缩数据3)将解压缩的数据复制到字节数组中。 我想改变什么: 1)我希望能够使用File.ReadAllBytes来读取解压缩的数据。 2)然后我想使用这个字节数组创建一个新的文件流对象。 简而言之,我想使用字节数组完成整个操作。 GZipStream的一个参数是某种类型的流,所以我想我使用了一个文件流。 但是,如果存在一些方法,我可以从字节数组创建一个新的FileStream实例 – 那么我应该没问题。 这是我到目前为止: FolderBrowserDialog fbd = new FolderBrowserDialog(); // Shows a browser dialog fbd.ShowDialog(); // Path to directory of files to compress and decompress. string dirpath = fbd.SelectedPath; DirectoryInfo di = new DirectoryInfo(dirpath); foreach (FileInfo fi in di.GetFiles()) { zip.Program.Decompress(fi); } // Get the stream of […]

可变长度整数编码

我正在尝试对LZ1 / LZ77减压算法进行逆向工程。 要输出的解码缓冲器/窗口的区域的长度在文件中被编码为可变长度整数。 我已尽可能多地阅读有关可变长度整数编码的内容,在这种情况下使用的方法似乎与我见过的其他方法不同。 也许是为了避免专利问题或者只是为了混淆。 包含的代码可能不完整,但此时它至少处理了几个文件。 我无法看到,如果有的话,下面使用的公式可以简化为更简单的方法。 大多数可变长度整数编码算法使用某种循环,但对于这一点,我无法做到这一点,因为在评估每个半字节时,公式似乎并不一致。 建议非常感谢。 private static int getLength(BitReader bitStream) { const int minSize = 2; int length = 0; byte nibble3, nibble2, nibble1; nibble3 = bitStream.ReadNibble(); if (nibble3 >= 0xc) { nibble2 = bitStream.ReadNibble(); nibble1 = bitStream.ReadNibble(); if (nibble3 == 0xF & nibble2 == 0xF & nibble1 == 0xF) […]

7zip压缩网络流

我想在通过网络发送之前压缩文件。 我认为最好的方法是7zip,因为它是免费和开源的。 我如何使用7zip与.net? 我知道7zip是免费的,并且他们在c#中有源代码但由于某种原因它在c#上非常慢,所以我宁愿调用因性能原因安装7zip时出现的dll 7z.dll 。 所以我能够在7z.dll中编组和调用方法的7z.dll是在名为sevenzipsharp的库的帮助下。 例如,将dll添加到我的项目中将使我能够: // if you installed 7zip 64bit version then make sure you change plataform target // like on the picture I showed above! SevenZip.SevenZipCompressor.SetLibraryPath(@”C:\Program Files\7-Zip\7z.dll”); var stream = System.IO.File.OpenRead(@”SomeFileToCompress.txt”); var outputStream = System.IO.File.Create(“Output.7z”); SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor(); compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2; compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra; compressor.CompressStream(stream, outputStream); 这就是我在c#中使用7zip的方式。 现在我的问题是: […]

什么是最好的.NET音频压缩库?

我正在为.NET寻找一个好的音频压缩库。 使用MP3的任何东西都已经出局(因为许可问题)。 基本上我只需要能够将常规WAV音频数据压缩成某种格式,然后解压缩回WAV。 最好是代码都是.NET(C#或VB.NET),但我认为这不太可能。 它应该是无损的或相对无损的(最好是192个MP3,最好是),压缩比至少要好到4:1。 我更喜欢基于缓冲区的API,但基于文件的API也可以。 有谁知道这样的事情?

.NET中的DeflateStream 4GB限制

来自MSDN: DeflateStream类 DeflateStream不能用于压缩大于4 GB的文件。 没有4 GB限制的.NET是否还有其他实现? 注意:我真的需要解压缩GZ格式的文件,内容大于4 GB。 任何代码都可以这样做吗?

解压缩抛出“无法正确加载基础压缩例程”

尝试使用以下代码在Win10移动(UWP)上解压缩文件 using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Read)) { ZipArchiveEntry entry = archive.Entries.First(); using (Stream reader = entry.Open()) { 在entry.Open()抛出以下错误。 “无法正确加载底层压缩例程。” 内在的例外 “无法加载DLL’clrcompression.dll’:找不到指定的模块。(HRESULTexception:0x8007007E)” 重要提示: entry.Open()在win10桌面上工作正常但在Win10移动版上没有工作,具有相同的项目(UWP) 使用Win10移动版10.0.14393.576。 (Lumia 650) UWP项目的目标版本是10.0 BUILD 14393 对桌面和移动版本使用相同的文件。 该文件在后端创建一个简单的文件 using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create,true)) 我正在使用Xamarin表格(我不认为这是相关的) 问题:有人经历过同样的例外吗? 它的根本原因是什么? 有哪些可用的解决方法? (我需要文件压缩跨平台) 更新:我按要求创建了简单的测试项目(感谢您查看)。 解压缩在测试项目中工作,但它正在加载一个不同的模块。 Debug / Modules窗口指出exception抛出项目使用System.IO.Compression.dll 4.06.24705.1,工作项目使用1.00.24301.1。 我上传了两个project.lock.json文件以进行比较https://1drv.ms/f/s!AqROiejT4oI3lL1q1tu3iJcfA2tKyg 。

减少图像中的颜色深度并不会减小文件大小?

我使用此代码来减少图像的深度: public void ApplyDecreaseColourDepth(int offset) { int A, R, G, B; Color pixelColor; for (int y = 0; y < bitmapImage.Height; y++) { for (int x = 0; x < bitmapImage.Width; x++) { pixelColor = bitmapImage.GetPixel(x, y); A = pixelColor.A; R = ((pixelColor.R + (offset / 2)) – ((pixelColor.R + (offset / 2)) % offset) […]

.NET压缩XML以存储在SQL Server数据库中

目前,我们的.NET应用程序在内存中构建XML数据,并将其保存到SQL Server数据库中。 使用ToString()将XElement对象转换为字符串,然后将其存储在DB中的varchar(MAX)列中。 我们不想使用SQL XML数据类型,因为我们不需要任何validation,SQL不需要在任何阶段查询XML。 尽管此实现工作正常,但我们希望通过在存储之前压缩XML并在检索数据库后对其进行解压缩来减小数据库的大小。 有没有人有任何压缩XElement对象的示例代码(解压缩也会很棒)? 此外,我需要对数据库列的数据类型进行哪些更改,以便我们可以充分利用此压缩? 我再次调查了SQL Server 2005提供的XML数据类型,它提供的validation开销太高,我们无法考虑使用它。 此外,虽然它确实压缩了XML,但它没有.NET DeflateStream类那么多的压缩。 我已经通过将我们使用的XML写入磁盘,然后将comrpessed版本保存为新文件来测试DeflateStream类。 结果很棒,一个16kb的文件下降到一个3kb的文件,所以这就是让它在内存中工作并将结果数据保存到数据库的情况。 有没有人有任何示例代码来进行压缩,我应该将varcahr(MAX)colum更改为type to varbinary? 提前致谢

将大数字(或字符串)压缩为小值

我的ASP.NET页面有以下查询字符串参数: …?IDs=1000000012,1000000021,1000000013,1000000022&… 在这种情况下, IDs参数将始终具有由某个东西分隔的数字。 目前有4个数字,但通常它们在3到7之间。 现在,我正在寻找将每个大数字从上面转换为最小可能值的方法; 具体压缩IDs查询字符串参数的值。 压缩每个数字算法或压缩IDs查询字符串参数的整个值都是受欢迎的。 编码或解码不是问题; 只压缩值IDs查询字符串参数。 为IDs创建一些唯一的小值,然后从某些数据源检索其值超出范围。 是否有算法将这些大数字压缩为小值或者将IDs查询字符串参数的值压缩在一起?

使用Compression.DeflateStream压缩和解压缩Stream

我正在尝试使用Compression.DeflateStream压缩和解压缩Stream。 压缩似乎工作正常,因为下面的代码将我的Stream压缩为一个110字节长的数组。 但是,读取解压缩的Stream会导致空字符串。 class Program { static void Main(string[] args) { // Compress a random string value string value = Path.GetRandomFileName(); byte[] compressedBytes; using (var writer = new StreamWriter(new MemoryStream())) { writer.Write(value); writer.Flush(); writer.BaseStream.Position = 0; compressedBytes = Compress(writer.BaseStream); } // Decompress compressed bytes Stream decompressedStream = Decompress(compressedBytes); // here already applies: decompressedStream.Length == 0 […]