客户端解压缩回字符串,从字符串的 C# 压缩



我有一些大型数据集,我想在发送给客户之前对其进行压缩。压缩工作。

利用这段代码将我的数据变成一个漂亮的小base64String:

示例:字符串 mytest ="这是一些测试文本。

public static string Compress(string mytest)
{
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
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 Convert.ToBase64String(gzBuffer);
}

在客户端,我需要向后走整个事情。

我可以使用(库(将base64string转换回字节数组:

var byteArray = Base64Binary.decodeArrayBuffer(source);

然后使用 pako.js我可以压缩 gzip 压缩内容:

var deflate = new pako.Deflate({ level: 1 });
deflate.push(uintArray, true);
if (deflate.err) { throw new Error(deflate.err); }

最后,我应该能够将其转换回我的文本:

var encodedString = String.fromCharCode.apply(null, deflate.result)
var decodedString = decodeURIComponent(encodedString);

问题是,虽然我没有收到任何错误,但我没有得到预期的结果,这应该是原始字符串 - "这是一些测试文本。

输出是这样的(不能全部粘贴(: xg''ïæ

有什么想法吗?

你需要在前端使用pako.Inflate
此外,在解码之前,您需要删除添加到前端gzBuffer前面的 4 字节大小。

这样的事情应该有效:

// "cookies rule the world" compressed with your c# code
let sample = "FgAAAB+LCAAAAAAABABLzs/PzkwtVigqzUlVKMlIVSjPL8pJAQBkkN7rFgAAAA==";
// decode base64 & convert to Uint8 Array
let binary = atob(sample);
let bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
// You appended the length at the start of gzBuffer, so you need to remove those bytes
bytes = bytes.slice(4);
// inflate the message & convert it to a string
let inflated = pako.inflate(bytes);
let message =  String.fromCharCode.apply(null, inflated);
console.log(message);
<script src="https://raw.githubusercontent.com/danguer/blog-examples/master/js/base64-binary.js"></script>
<script src="https://unpkg.com/pako@1.0.10/dist/pako.min.js"></script>

相关内容

  • 没有找到相关文章

最新更新