解压时出现错误
“输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非空白字符。”
它压缩得很好,但不解压缩。我查看了许多其他具有相同问题的示例,我觉得我正在遵循所说的内容,但在解压缩时仍然一无所获。以下是压缩和解压方法:
public static string CompressData(string data)
{
byte[] bffr = Encoding.UTF8.GetBytes(data);
var mStream = new MemoryStream();
using (var gZipStream = new GZipStream(mStream, CompressionMode.Compress, true))
{
gZipStream.Write(bffr, 0, bffr.Length);
}
mStream.Position = 0;
var compressedData = new byte[mStream.Length];
mStream.Read(compressedData, 0, compressedData.Length);
var gZipBuffer = new byte[compressedData.Length + 4];
Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
Buffer.BlockCopy(BitConverter.GetBytes(bffer.Length), 0, gZipBuffer, 0, 4);
return Convert.ToBase64String(gZipBuffer);
}
public static string DecompressData(string compressedData)
{
byte[] gZipBffr = Convert.FromBase64String(compressedData);
using (var mStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(gZipBffr , 0);
mStream.Write(gZipBffr , 4, gZipBffr .Length - 4);
var buffer = new byte[dataLength];
mStream.Position = 0;
using (var gZipStream = new GZipStream(mStream, CompressionMode.Decompress))
{
gZipStream.Read(buffer, 0, buffer.Length);
}
return Encoding.UTF8.GetString(buffer);
}
}
string s = CompressData(s2.Tostring());
其中 s2 是类型 XElement 字符串 pH = DecompressData(stream2)); 其中stream2是字符串类型..在数据库中它存储在nvarchar类型列中,同时压缩删除根标签。
第一次 xml 就像 peet 3/24/2012 Percent 33.3 10 下一次将另一个学生数据添加到现有 xml 中,这里每次压缩时我们都必须删除父标签。
<student>
<data>
<name>peet</name>
<date>3/24/2012</date>
<field>Percent</field>
<new>33.3</new>
<old>10</old>
</data>
<data>
<name>raaz</name>
<date>3/24/2011</date>
<field></field>
<new>33.3</new>
<old>10</old>
</data>
<data>
<name>arya</name>
<date>3/24/2010</date>
<field></field>
<new>33.3</new>
<old>10</old>
</data>
</student>