我需要在PowerShell中将字符串压缩到Zlib。
有没有一种方法可以使用 PowerShell 中的 ZLibStream 类进行压缩?
https://learn.microsoft.com/en-us/dotnet/api/system.io.compression.zlibstream?view=net-8.0
我能够使用类
DeflateStream
和 GZipStream
进行压缩,但使用数据的外部系统无法对其进行解码。
这是我尝试过的powershell脚本
$stringToCompress = 'string to compress'
$memStream = New-Object System.IO.MemoryStream
$deflateStream = New-Object System.IO.Compression.GZipStream($memStream, [System.IO.Compression.CompressionMode]::Compress)
$streamWriter = New-Object System.IO.StreamWriter($deflateStream)
$streamWriter.Write($stringToCompress)
$streamWriter.Close();
$encodedCompressedString = [System.Convert]::ToBase64String($memStream.ToArray())
Write-Output $encodedCompressedString
使用
ZLibStream
进行压缩和扩展的过程与使用 GZipStream
几乎相同。
# Choose encoding here, need to use the same for compress & decompress
$enc = [System.Text.Encoding]::UTF8
# - Compress:
$string = 'hello world!'
$outstream = [System.IO.MemoryStream]::new()
$zlib = [System.IO.Compression.ZLibStream]::new(
$outstream,
[System.IO.Compression.CompressionMode]::Compress)
$bytes = $enc.GetBytes($string)
$zlib.Write($bytes, 0, $bytes.Length)
$zlib.Dispose()
[System.Convert]::ToBase64String($outstream.ToArray())
# eJzLSM3JyVcozy/KSVEEAB6JBH4=
# - Decompress:
$instream = [System.IO.MemoryStream]::new(
[System.Convert]::FromBase64String('eJzLSM3JyVcozy/KSVEEAB6JBH4='))
$zlib = [System.IO.Compression.ZLibStream]::new(
$instream,
[System.IO.Compression.CompressionMode]::Decompress)
$outstream = [System.IO.MemoryStream]::new()
$zlib.CopyTo($outstream)
$zlib.Dispose()
$enc.GetString($outstream.ToArray())
# hello world!