GZipStream 解压器 = new GZipStream((MemoryStream)流, CompressionMode.Decompress);
String 解压后 = new StreamReader(解压器).ReadToEnd();哪位熟悉GZipStream的,看看我解压内存流数据,返回的总是空值,很简单的2行代码,哪里不对?fsdfdsfdf
String 解压后 = new StreamReader(解压器).ReadToEnd();哪位熟悉GZipStream的,看看我解压内存流数据,返回的总是空值,很简单的2行代码,哪里不对?fsdfdsfdf
{
if (stream == null)
return "GetResponseStream为null"; using (var sr = new StreamReader(stream, Encoding.UTF8))
{
var html = sr.ReadToEnd();
}
}
我比你多了一个Encoding,使用很多年了,没出过问题
string responseStr = string.Empty;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream receiveStream = response.GetResponseStream())
{
if (receiveStream != null)
{
if (response.ContentEncoding.ToLower().Contains("gzip"))
{
using (GZipStream stream = new GZipStream(receiveStream, CompressionMode.Decompress))
{
using (StreamReader readStream = new StreamReader(stream, Encoding.UTF8))
{
responseStr = readStream.ReadToEnd();
}
}
}
else
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
responseStr = readStream.ReadToEnd();
}
}
}
}
解压器.Seek(0, SeekOrigin.Begin);
加上Encoding.UTF8,结果也一样,可以排除编码问题了。会不会是参数传递时产生的问题呢?async void 调用()
{
Byte[] 缓冲 = new Byte[10240];
WebSocketReceiveResult 字节 = await 客户端.ReceiveAsync(new ArraySegment<Byte>(缓冲), CancellationToken.None);
ThreadPool.QueueUserWorkItem(new WaitCallback(解析), new MemoryStream(缓冲, 0, 字节.Count));
}
void 解析(Object 流)
{
GZipStream 解压器 = new GZipStream(流 as Stream, CompressionMode.Decompress);
String 解压后 = new StreamReader(解压器, Encoding.UTF8).ReadToEnd(); //为空值
}
ThreadPool.QueueUserWorkItem(new WaitCallback(解析), new MemoryStream(缓冲, 0, 字节.Count));
改成
ThreadPool.QueueUserWorkItem(new WaitCallback(解析), new MemoryStream(字节, 0, 字节.Count));
String 解压后 = new StreamReader(解压器, Encoding.UTF8).ReadToEnd();那么问题应该还是出在这两行里面了。
leaveOpenType: System.Boolean
如果在释放 GZipStream 对象之后打开流,则为 true;否则为 false。
这个参数控制什么呢?能举个例子吗?
protected override void Dispose(bool disposing)
{
try
{
this.PurgeBuffers(disposing);
}
finally
{
try
{
if (disposing)
{
if (!this._leaveOpen)
{
if (this._stream != null)
this._stream.Close();
}
}