放气管柱C#
我试图对从websocket连接获得的字符串进行放气,但每次尝试运行此代码时都会出现错误。我还尝试使用ascii编码直接从字符串中获取字节,但也不起作用放气管柱C#,c#,compression,deflate,screeps,C#,Compression,Deflate,Screeps,我试图对从websocket连接获得的字符串进行放气,但每次尝试运行此代码时都会出现错误。我还尝试使用ascii编码直接从字符串中获取字节,但也不起作用 public static byte[] Decompress(string input) { byte[] data = Convert.FromBase64String(input) byte[] decompressedArray = null; using (MemoryStream decompressed
public static byte[] Decompress(string input)
{
byte[] data = Convert.FromBase64String(input)
byte[] decompressedArray = null;
using (MemoryStream decompressedStream = new MemoryStream())
{
using (MemoryStream compressStream = new MemoryStream(data))
{
using (DeflateStream deflateStream = new DeflateStream(compressStream, CompressionMode.Decompress))
{
deflateStream.CopyTo(decompressedStream);
}
}
decompressedArray = decompressedStream.ToArray();
}
return decompressedArray;
}
System.IO.InvalidDataException:“块长度与其补码不匹配。”
我尝试了这段代码的一些不同的变体,但没有任何效果,但我知道这是可能的,因为我可以使用这个网站和deflate选项对其进行放气
我要放气的一个示例字符串:
2.在一个视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频视频XXXXXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 8 QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQWWWWWWWWWWWWWWWWWWWWWWWWWW4.中国的vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvA6SFGL5/N3jfsDl8+DjLnkiWmedGVNG6XkC60mQ+3iT+SW2XAI1J2TecySh60KBQTKDVAPEA8VPXJLHDUNPADHGARBXTKZJ7F4UIVE29JJPVNVAE36+/hpSDkQ==字符串(JSON)可能来自一个字符串。您可以使用另一个流来解压缩数据内容: ► 您需要.Net Framework 4.7.2+才能正确解压缩数据 值得注意的是,压缩格式有点不合适。压缩数据签名,
78:01
,可能表明这是一个ZLib压缩字符串,因此基于ZLib(来自.Net Framework 4.5)的.Net应该解压缩数据。7-Zip和WinZip都无法打开数据(保存为二进制文件的流) JSON是UTF8编码的(它也适用于ASCII字符串): 导致():
如果我在你的例子中使用GzipStream,我仍然会在System.IO.InvalidDataException中得到一个错误:“GZip头中的幻数不正确。请确保你正在传递GZip流。”结果表明它只适用于.NET Framework 4.7.2,而我使用的是4.6.1,我更改了它,现在它可以工作了,谢谢你说得对。您至少需要
4.7.2
<代码>4.7.1在此也失败。我会把它加到笔记上。
using System.IO;
using System.IO.Compression;
using System.Text;
public static byte[] Decompress(string input)
{
byte[] data = Convert.FromBase64String(input)
using (var decompressedStream = new MemoryStream())
using (var compressStream = new MemoryStream(data))
using (var gzip = new GZipStream(compressStream, CompressionMode.Decompress)) {
gzip.CopyTo(decompressedStream);
return decompressedStream.ToArray();
}
}
string json = Encoding.UTF8.GetString(Decompress(base64String));
[
"room:shard1/W1N1",
{
"objects":{
"5982fe1eb097071b4adc0743":{
"energy":2440,
"invaderHarvested":2664
},
"5dad1a7cef434b7d68fd5160":{
"store":{
"energy":1536
}
},
"5dd1cf2c884de042fb6be550":{
"hits":4100,
"nextDecayTime":25374980
}
},
"gameTime":25373981,
"info":{
"mode":"world"
},
"visual":"{\"t\":\"r\",\"x\":37,\"y\":0,\"w\":12,\"h\":6,\"s\":{\"fill\":\"black\",\"stroke\":\"white\",\"opacity\":0.25}}\n{\"t\":\"t\",\"text\":\"CPU Usage\",\"x\":43,\"y\":1,\"s\":{\"font\":0.8}}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":1.5,\"x2\":48.95,\"y2\":1.5}\n{\"t\":\"t\",\"text\":\"Current Usage\",\"x\":37.5,\"y\":2.5,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":\"2.43 / 4\",\"x\":46.5,\"y\":2.5}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":3,\"x2\":48.95,\"y2\":3}\n{\"t\":\"t\",\"text\":\"Average Usage\",\"x\":37.5,\"y\":4,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":\"2.82\",\"x\":46.5,\"y\":4}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":4.5,\"x2\":48.95,\"y2\":4.5}\n{\"t\":\"t\",\"text\":\"Bucket Storage\",\"x\":37.5,\"y\":5.5,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":9998,\"x\":46.5,\"y\":5.5}\n{\"t\":\"l\",\"x1\":44,\"y1\":1.55,\"x2\":44,\"y2\":5.95}\n",
"users":{
"595d14d08d05b87f33a7e33a":{
"_id":"595d14d08d05b87f33a7e33a",
"username":"wtfrank",
"badge":{
"type":22,
"color1":"#adbaeb",
"color2":"#265fd9",
"color3":"#1a1a1a",
"param":-63,
"flip":true
}
}
}
}
]