我无法理解。它看起来是正确的。
窗户让我
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);
}
}
}
}
}