【Unity】文字列をGzip圧縮・展開する

2019/08/26DEVELOP, Unity

通信料削減のためにも、プレーンなテキストは圧縮しファイルサイズを小さくしておいた方が良い。

目次

アセット

GZipStream + DeflateStream – Unity.IO.Compression – Asset Store

ユーティリティコード

using System.IO;
using Unity.IO.Compression;
public static class GZipUtility
{
    /// <summary>
    /// GZipか確認します。
    /// </ummary>
    public static bool isGZIP(byte[] _header)
    {
        if(_header.IsNullOrEmpty())
        {
            return false;
        }
        byte[] signature =
        {
            GZipConstants.ID1,
            GZipConstants.ID2,
        };
        if(_header[0] != signature[0] || _header[1] != signature[1])
        {
            return false;
        }
        return true;
    }
    /// <summary>
    /// GZIP圧縮したバッファを返します。
    /// </summary>
    public static byte[] ComporessGZIP(string _str)
    {
        using(var memoryStream = new MemoryStream())
        {
            using (var inflateStream = new GZipStream(memoryStream, CompressionMode.Compress))
            {
                using(var writer = new StreamWriter(inflateStream))
                {
                    writer.Write(_str);
                }
            }
            return memoryStream.ToArray();
        }
    }
    /// <summary>
    /// GZIP圧縮されたバッファを解凍します。
    /// </summary>
    public static string DeComporessGZIP(byte[] _bytes)
    {
        using(var memoryStream = new MemoryStream(_bytes))
        {
            using(var deflateStream = new GZipStream(memoryStream, CompressionMode.Decompress))
            {
                using(var reader = new StreamReader(deflateStream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
}

Posted by kazupon