ホームページ > バックエンド開発 > PHPチュートリアル > PHP&NET の対称圧縮および圧縮解除の研究

PHP&NET の対称圧縮および圧縮解除の研究

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:16:51
オリジナル
877 人が閲覧しました

php&.net の対称圧縮と圧縮解除に関するディスカッション

http://blog.csdn.net/michaell_zhang/article/details/5979883

C# クライアントが PHP SOAP WebService にアクセスする場合送信 大量のテキスト データの場合は、圧縮することでネットワーク送信を削減できます。

C# では、データを圧縮および解凍するために、System.IO.Compression 名前空間の下に GZipStream クラスと DeflateStream クラスという 2 つのクラスが用意されています。実験した結果、C# で GZipStream を使用して圧縮された文字列は、PHP では gzuncompress 関数を使用して解凍できません。gzdecode を使用すると解凍できるという人もいますが、私の PHP は gzdecode 関数をサポートしていませんが、gzencode 関数はあります。 ? 理由は不明ですが、PHP のバグと言われており、この機能は PHP6 までは提供されない可能性があります。

C# で DeflateStream クラスを使用してテキストを圧縮した後、gzinflate を使用して PHP でテキストを解凍できます。サンプル コードは次のとおりです。

クライアント C# (最初の 4 バイトは、C# での解凍を容易にするために元のテキストの長さを増やしますが、PHP 側での解凍には役に立ちません):

public static string Compress(string text)        {            byte[] buffer = Encoding.UTF8.GetBytes(text);            MemoryStream ms = new MemoryStream();            using (DeflateStream zip = new DeflateStream(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);        }
ログイン後にコピー

? サーバー側 PHP:

?

function Decompress($strSource){    $strTemp = base64_decode($strSource);    $strTemp = substr($strTemp, 4);    return gzinflate($strTemp);}
ログイン後にコピー

? 中国語をサポートし、UTF8 としてエンコードされます。

?

http:/ /blog.csdn.net/allsharps/article/details/7357328

/// <summary>    /// 简单的压缩    /// </summary>    public static class CompressHelper    {        /// <summary>        /// 压缩字符串        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public static byte[] CompressString(string str)        {            return CompressBytes(Encoding.UTF8.GetBytes(str));        }        /// <summary>        /// 压缩二进制        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public static byte[] CompressBytes(byte[] str)        {            var ms = new MemoryStream(str) {Position = 0};            var outms = new MemoryStream();            using (var deflateStream = new DeflateStream(outms, CompressionMode.Compress, true))            {                var buf = new byte[1024];                int len;                while ((len = ms.Read(buf, 0, buf.Length)) > 0)                    deflateStream.Write(buf, 0, len);            }            return outms.ToArray();        }        /// <summary>        /// 解压字符串        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public static string DecompressString(byte[] str)        {            return Encoding.UTF8.GetString(DecompressBytes(str));        }        /// <summary>        /// 解压二进制        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        public static byte[] DecompressBytes(byte[] str)        {            var ms = new MemoryStream(str) {Position = 0};            var outms = new MemoryStream();            using (var deflateStream = new DeflateStream(ms, CompressionMode.Decompress, true))            {                var buf = new byte[1024];                int len;                while ((len = deflateStream.Read(buf, 0, buf.Length)) > 0)                    outms.Write(buf, 0, len);            }            return outms.ToArray();        }    }
ログイン後にコピー

?

?

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート