【C#】文字列->圧縮処理->BASE64->解凍処理->文字列な処理コード
関連記事
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング 【2023年10月18日(水)】
- 【#CSHARP】次の案件のスケルトン書いてgitサーバに登録するなどと 【2023年05月16日(火)】
仕事で,文字列を圧縮して,Base64文字列へエンコード,
さらにBase64文字列から解凍の上で,元の文字列へデコード
な,実装の必要性があったので,ちょろっと作ってみました
参考にドゾー
いつものように,バグってたらスマソ♥
using System.IO.Compression; //------------------------------------------ //文字列を圧縮BASE64に変換して返す // //------------------------------------------ static public string Base64FromStringComp(string st) { #region 文字列を圧縮 // 文字列をバイト配列に変換します byte[] source = Encoding.UTF8.GetBytes(st); // 入出力用のストリームを生成します MemoryStream ms = new MemoryStream(); DeflateStream CompressedStream = new DeflateStream(ms, CompressionMode.Compress, true); // ストリームに圧縮するデータを書き込みます CompressedStream.Write(source, 0, source.Length); CompressedStream.Close(); // 圧縮されたデータを バイト配列で取得します byte[] destination = ms.ToArray(); #endregion #region 圧縮したバイナリをBASE64へ変換 //Base64で文字列に変換 string base64String; base64String = System.Convert.ToBase64String(destination, Base64FormattingOptions.InsertLineBreaks); #endregion return base64String; } //------------------------------------------ //BASE64文字列を戻し解凍の上で文字列に変換して返す // //------------------------------------------ static public string StringFromBase64Comp(string st) { #region BASE64文字列を圧縮バイナリへ戻す byte [] bs = System.Convert.FromBase64String(st); #endregion #region 圧縮バイナリを文字列へ解凍する // 入出力用のストリームを生成します MemoryStream ms = new MemoryStream(bs); MemoryStream ms2 = new MemoryStream(); DeflateStream CompressedStream = new DeflateStream(ms, CompressionMode.Decompress); // MemoryStream に展開します while (true) { int rb = CompressedStream.ReadByte(); // 読み終わったとき while 処理を抜けます if (rb == -1) { break; } // メモリに展開したデータを読み込みます ms2.WriteByte((byte)rb); } string result = Encoding.UTF8.GetString(ms2.ToArray()); #endregion return result; }
==================================
ちょっと整形 Compress.cs
==================================
using System.Text;
using System.IO;
using System.IO.Compression;
using System;
public static class Compress{
//——————————————
//文字列を圧縮BASE64に変換して返す
//——————————————
public static string Base64FromStringComp(string st){
// 文字列をバイト配列に変換します
byte[] source = Encoding.UTF8.GetBytes(st);
// 入出力用のストリームを生成します
MemoryStream ms = new MemoryStream();
DeflateStream CompressedStream = new DeflateStream(ms, CompressionMode.Compress, true);
// ストリームに圧縮するデータを書き込みます
CompressedStream.Write(source, 0, source.Length);
CompressedStream.Close();
// 圧縮されたデータを バイト配列で取得します
byte[] destination = ms.ToArray();
//Base64で文字列に変換
string base64String;
base64String = System.Convert.ToBase64String(destination, Base64FormattingOptions.InsertLineBreaks);
return base64String;
}
//——————————————
//BASE64文字列を戻し解凍の上で文字列に変換して返す
//——————————————
public static string StringFromBase64Comp(string st){
byte [] bs = System.Convert.FromBase64String(st);
// 入出力用のストリームを生成します
MemoryStream ms = new MemoryStream(bs);
MemoryStream ms2 = new MemoryStream();
DeflateStream CompressedStream = new DeflateStream(ms, CompressionMode.Decompress);
// MemoryStream に展開します
while(true){
int rb = CompressedStream.ReadByte();
// 読み終わったとき while 処理を抜けます
if (rb == -1){
break;
}
// メモリに展開したデータを読み込みます
ms2.WriteByte((byte)rb);
}
string result = Encoding.UTF8.GetString(ms2.ToArray());
return result;
}
}
>>匿名 さま
投稿ありがとうございます!
これからもごひいきに♪