0

理解できません。正しく見えます。

Windowsは私を取得します

21008 80373 0.2613813
80372 80372 1

.NETでのデフレートは良くありませんが(26%であってはなりません)、さらに重要なことに、解凍されたサイズは1オフです。ファイル(そのhtml)を見ると、最後のファイルがありません>

ubuntuのモノラル(2.10.5)は私を取得します

4096 80373 0.05096239
12297 12297 1

-編集-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();間違っています。deflate ストリームを閉じる必要があります。d.Close();それを解決します。

于 2012-07-14T17:17:42.250 に答える