C# 如何在没有流或系统io的情况下压缩字节数组
我试图将一个图像编码成字节数组并发送到服务器。 编码和发送部分工作正常,但我的问题是字节数组太大,发送时间太长,所以我认为压缩它会使发送速度更快。但实际问题是我不能使用system.io或streams。我的目标是.NET2.0。 多谢各位C# 如何在没有流或系统io的情况下压缩字节数组,c#,.net,compression,C#,.net,Compression,我试图将一个图像编码成字节数组并发送到服务器。 编码和发送部分工作正常,但我的问题是字节数组太大,发送时间太长,所以我认为压缩它会使发送速度更快。但实际问题是我不能使用system.io或streams。我的目标是.NET2.0。 多谢各位 using System.IO; using System.IO.Compression; 代码: 更新 使用7zip库: 压缩 public static byte[] Compress(byte[] inputData)
using System.IO;
using System.IO.Compression;
代码:
更新 使用7zip库:
压缩
public static byte[] Compress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
MemoryStream output = new MemoryStream();
using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal))
{
dstream.Write(inputData, 0, inputData.Length);
}
return output.ToArray();
}
OR
public static byte[] Compress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
using (var compressIntoMs = new MemoryStream())
{
using (var gzs = new BufferedStream(new GZipStream(compressIntoMs,
CompressionMode.Compress), BUFFER_SIZE))
{
gzs.Write(inputData, 0, inputData.Length);
}
return compressIntoMs.ToArray();
}
}
解压缩
public static byte[] Decompress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
MemoryStream input = new MemoryStream(inputData);
MemoryStream output = new MemoryStream();
using (DeflateStream dstream = new DeflateStream(input, CompressionMode.Decompress))
{
dstream.CopyTo(output);
}
return output.ToArray();
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
}
OR
public static byte[] Decompress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
using (var compressedMs = new MemoryStream(inputData))
{
using (var decompressedMs = new MemoryStream())
{
using (var gzs = new BufferedStream(new GZipStream(compressedMs, CompressionMode.Decompress), BUFFER_SIZE))
{
gzs.CopyTo(decompressedMs);
}
return decompressedMs.ToArray();
}
}
}
也许是一点感激吧@mjb花了X分钟的时间试图帮助你。当你回答问题时,并不总是容易抓住。对不起,如果我冒犯了任何人。我不是故意的。但给出的答案与我的要求完全相反,因此我认为他/她没有足够尊重我,没有把问题读到最后。我花了一天的时间和公司的时间在这上面,我有点紧张。不管怎样,我很抱歉,谢谢你的更新,我会查出来的。@TheFallen不用担心。我理解。不知何故,这也是我的错误。我使用了这个7Zip库,但它找不到对SevenZipHelper的引用。您能帮忙吗?@pulkit目标框架(.NET版本)与引用的7Zip DLL的.NET版本生成不匹配。例如,您的项目是.NET 2.0,但7Zip DLL是.NET 4.0,反之亦然。出于好奇,为什么不能使用system.io或streams?您使用的是不同的平台吗?我正在为webgl编码,在webgl中,我不能使用@Roll的大多数.net库。op已经声明,他不能使用System.IO命名空间,因为他在另一个没有库的平台上开发。
public static byte[] Compress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
MemoryStream output = new MemoryStream();
using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal))
{
dstream.Write(inputData, 0, inputData.Length);
}
return output.ToArray();
}
OR
public static byte[] Compress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
using (var compressIntoMs = new MemoryStream())
{
using (var gzs = new BufferedStream(new GZipStream(compressIntoMs,
CompressionMode.Compress), BUFFER_SIZE))
{
gzs.Write(inputData, 0, inputData.Length);
}
return compressIntoMs.ToArray();
}
}
public static byte[] Decompress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
MemoryStream input = new MemoryStream(inputData);
MemoryStream output = new MemoryStream();
using (DeflateStream dstream = new DeflateStream(input, CompressionMode.Decompress))
{
dstream.CopyTo(output);
}
return output.ToArray();
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
}
OR
public static byte[] Decompress(byte[] inputData)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
using (var compressedMs = new MemoryStream(inputData))
{
using (var decompressedMs = new MemoryStream())
{
using (var gzs = new BufferedStream(new GZipStream(compressedMs, CompressionMode.Decompress), BUFFER_SIZE))
{
gzs.CopyTo(decompressedMs);
}
return decompressedMs.ToArray();
}
}
}