【发布时间】:2021-08-13 20:50:19
【问题描述】:
我的字符串是一个 Json 文件(test.json),内容如下
{
"objectId": "bbad4cc8-bce8-438e-8683-3e603d746dee",
"timestamp": "2021-04-28T14:02:42.247Z",
"variable": "temperatureArray",
"model": "abc.abcdefg.abcdef",
"quality": 5,
"value": [ 43.471600438222104, 10.00940101687303, 39.925500606152, 32.34369812176735, 33.07786476010357 ]
}
我压缩如下
using ICSharpCode.SharpZipLib.GZip;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
namespace GZipTest
{
public static class SharpZipLibCompression
{
public static void Test()
{
Trace.WriteLine("****************SharpZipLib Test*****************************");
var testFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "test.json");
var text = File.ReadAllText(testFile);
var ipStringSize = System.Text.UTF8Encoding.Unicode.GetByteCount(text);
var compressedString = CompressString(text);
var opStringSize = System.Text.UTF8Encoding.Unicode.GetByteCount(compressedString);
float stringCompressionRatio = (float)opStringSize / ipStringSize;
Trace.WriteLine("String Compression Ratio using SharpZipLib" + stringCompressionRatio);
}
public static string CompressString(string text)
{
if (string.IsNullOrEmpty(text))
return null;
byte[] buffer = Encoding.UTF8.GetBytes(text);
using (var compressedStream = new MemoryStream())
{
GZip.Compress(new MemoryStream(buffer), compressedStream, false);
byte[] compressedData = compressedStream.ToArray();
return Convert.ToBase64String(compressedData);
}
}
}
}
但我的压缩字符串大小(opStringSize)大于原始字符串大小(ipStringSize)。为什么?
【问题讨论】:
-
压缩带来开销。对于一个小字符串,这些开销可能比您从压缩中获得的任何收益都要大,特别是如果您的字符串压缩不好
-
@canton7 看起来有点可疑。因为当使用 .net 内置的 'System.IO.Compression.GZipStream' 完成时,我的大小比原始大小要小。无论如何,它不应该超过原来的大小,对吧?我错过了什么吗?
-
不,这正是 canton 告诉你的。压缩有开销。假设它为您压缩的任何内容增加了 50。所以,如果你压缩原来是 40 的东西,压缩 20,那么它将是 20+50 = 70 > 40。如果你压缩 60k 的东西,压缩 40k,那么它将是 40k+50,这是微不足道的更多比压缩后的大小,仍然比未压缩时小很多。
-
@Fildor 你是对的。我尝试了更大的字符串,我得到了非常好的压缩率。谢谢 :-)。但是对于原始问题中的小字符串,压缩会使事情变得更糟:-)..仍然想知道相同小字符串的“System.IO.Compression.GZipStream”压缩如何更好地压缩?
-
另外,您正在转换为 base64。这会大大增加任何压缩结果的大小。
标签: c# compression gzip deflate sharpziplib