0

我无法理解。它看起来是正确的。

窗户让我

21008 80373 0.2613813
80372 80372 1

.NET 上的 Deflate 并不好(它不应该是 26%),但更重要的是,解压缩后的大小是 1。查看文件(它的html)它缺少最后一个>

ubuntu上的单声道(2.10.5)让我

4096 80373 0.05096239
12297 12297 1

-edit- 5% 不正确。正确完成后,它的 21% - 结束编辑 - 原始的 5% 似乎是正确的。但是解压后的尺寸太小了。查看文件,它看起来像是正确的 html 数据。它只是没有解压缩它。

代码有什么问题?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;
namespace DeflateTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string fn1 = args.First();
            var fn2 = fn1 + ".out";
            var fn3 = fn1 + ".outorig";
            {
                using (var m = new MemoryStream())
                using (var d = new DeflateStream(m, CompressionMode.Compress, true))
                using (var f = File.OpenRead(fn1))
                {
                    var filelen = 0;
                    var b = new Byte[1024 * 4];
                    while (true)
                    {
                        var len = f.Read(b, 0, b.Length);
                        if (len <= 0)
                            break;
                        filelen += len;
                        d.Write(b, 0, len);
                    }
                    d.Flush();
                    m.Flush();
                    var m_arr = m.ToArray();
                    using (var ff = File.Create(fn2))
                    {
                        ff.Write(m_arr, 0, m_arr.Length);
                    }
                    Console.WriteLine(@"{0} {1} {2}", m_arr.Length, filelen, (float)m_arr.Length / filelen);
                }
            }
            {
                using (var f = File.OpenRead(fn2)) 
                using (var d = new DeflateStream(f, CompressionMode.Decompress, true))
                using (var m = new MemoryStream())
                {
                    var filelen = 0;
                    var b = new Byte[1024 * 4];
                    while (true)
                    {
                        var len = d.Read(b, 0, b.Length);
                        if (len <= 0)
                            break;
                        filelen += len;
                        m.Write(b, 0, len);
                    }
                    m.Flush();
                    var m_arr = m.ToArray();
                    using (var ff = File.Create(fn3)) { ff.Write(m_arr, 0, m_arr.Length); }
                    Console.WriteLine(@"{0} {1} {2}", m_arr.Length, filelen, (float)m_arr.Length / filelen);
                }
            }
        }
    }
}
4

1 回答 1

3

d.Flush();是不正确的。需要关闭放气流。d.Close();解决它。

于 2012-07-14T17:17:42.250 回答