|
WinFormアプリ、.NETFrameWork4.8で検証したときのソースを貼っておきます。
MemoryStreamを利用するパターンと利用しないパターンと両方検証しています。
また、圧縮1(MemoryStream利用しない)と圧縮2(MemoryStream利用する)で
圧縮後のバイナリが異なるとの書き込みが「魔界の仮面弁士さん」からあったので
本当かなと思い検証も行っています。
結果は確かにバイナリは異なるのですが、解凍を行うと問題なく解凍結果は一致していました。
private void button1_Click(object sender, EventArgs e)
{
var inputdata = "あいうえお";
var bytesData = System.Text.Encoding.UTF8.GetBytes(inputdata);
var ret1 = CompressToMemory1(bytesData);
string str1 = BitConverter.ToString(ret1);
Console.WriteLine(str1);
var ret2 = CompressToMemory2(bytesData);
string str2 = BitConverter.ToString(ret2);
Console.WriteLine(str2);
if(str1 == str2)
{
Console.WriteLine("圧縮方法1と2の比較:一致");
}
else
{
//同じ文字列をエンコードしているが一致する保証はない
Console.WriteLine("圧縮方法1と2の比較:不一致");
}
var ret3 = DecompressToMemory1(ret1);
var str3 = System.Text.Encoding.UTF8.GetString(ret3);
if (str3 == inputdata)
{
Console.WriteLine("圧縮方法1、解凍方法1での確認:一致");
}
else
{
Console.WriteLine("圧縮方法1、解凍方法1での確認:不一致");
}
var ret4 = DecompressToMemory1(ret2);
var str4 = System.Text.Encoding.UTF8.GetString(ret4);
if (str4 == inputdata)
{
Console.WriteLine("圧縮方法2、解凍方法1での確認:一致");
}
else
{
Console.WriteLine("圧縮方法2、解凍方法1での確認:不一致");
}
var ret5 = DecompressToMemory2(ret1);
var str5 = System.Text.Encoding.UTF8.GetString(ret5);
if (str5 == inputdata)
{
Console.WriteLine("圧縮方法1、解凍方法2での確認:一致");
}
else
{
Console.WriteLine("圧縮方法1、解凍方法2での確認:不一致");
}
var ret6 = DecompressToMemory2(ret2);
var str6 = System.Text.Encoding.UTF8.GetString(ret6);
if (str6 == inputdata)
{
Console.WriteLine("圧縮方法2、解凍方法2での確認:一致");
}
else
{
Console.WriteLine("圧縮方法2、解凍方法2での確認:不一致");
}
}
private byte[] CompressToMemory1(byte[] bytesData)
{
var ret = XZ.NET.XZOutputStream.Encode(bytesData);
return ret;
}
private byte[] CompressToMemory2(byte[] bytesData)
{
byte[] ret;
using (var ms = new MemoryStream())
using (var xzStream = new XZOutputStream(ms))
{
xzStream.Write(bytesData, 0, bytesData.Length);
xzStream.Close();
ret = ms.ToArray();
}
return ret;
}
private byte[] DecompressToMemory1(byte[] bytesData)
{
var ret = XZ.NET.XZInputStream.Decode(bytesData);
return ret;
}
private byte[] DecompressToMemory2(byte[] bytesData)
{
byte[] ret;
using (var msInput = new MemoryStream())
{
msInput.Write(bytesData, 0, bytesData.Length);
msInput.Position = 0;
using (var xzStream = new XZInputStream(msInput))
using (var msResult = new MemoryStream())
{
xzStream.CopyTo(msResult);
msResult.Close();
ret = msResult.ToArray();
}
}
return ret;
}
|