我想操纵一个算法来压缩在C#中多空双方的字符串,所有我曾试图算法能够压缩长字符串,但也不短(约5个字符)。的代码是:C#压缩短期和长期的字符串
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.IO;
using System.Collections;
using System.Text;
namespace CompressString {
internal static class StringCompressor
{
/// <summary>
/// Compresses the string.
/// </summary>
/// <param name="text">The text.</param>
/// <returns>compressed string</returns>
public static string CompressString(string text)
{
byte[] buffer = Encoding.Default.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Encoding.Default.GetString(gzBuffer);
}
/// <summary>
/// Decompresses the string.
/// </summary>
/// <param name="compressedText">The compressed text</param>
/// <returns>uncompressed string</returns>
public static string DecompressString(string compressedText)
{
byte[] gzBuffer = Encoding.Default.GetBytes(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.Default.GetString(buffer);
}
}
}}
我InvalidDataException在管线中解压缩方法(在解码发现无效的数据): zip.Read(缓冲液,0,buffer.Length); 你有什么建议?
你应该发布一些代码,你已经尝试了什么,或者至少扩展了你的问题。请参阅http://stackoverflow.com/faq – 2013-04-30 10:47:27
压缩可以*从不*保证将所有内容缩短......并且压缩非常少量的数据非常少见。 – 2013-04-30 10:48:38
例如:如果你有一个像'aaaaa'这样的字符串,那么你可以将它缩短为'5a'。但是如果你有像'afgdc'这样的字符串,那么没有真正有意义的方法来缩短它的算法。你可以创建一个字典并说'1 =“afgdc”',然后只提交'1',但另一方需要知道'1'代表什么,所以你还需要提交字典,你还没有获得任何东西。 – Corak 2013-04-30 11:08:45