Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有流或系统io的情况下压缩字节数组_C#_.net_Compression - Fatal编程技术网

C# 如何在没有流或系统io的情况下压缩字节数组

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)

我试图将一个图像编码成字节数组并发送到服务器。 编码和发送部分工作正常,但我的问题是字节数组太大,发送时间太长,所以我认为压缩它会使发送速度更快。但实际问题是我不能使用system.io或streams。我的目标是.NET2.0。 多谢各位

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();
                    }
                }
            }