Powershell 中的 Zlib 压缩

问题描述 投票:0回答:1

我需要在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 
powershell zlib
1个回答
0
投票

使用

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!
© www.soinside.com 2019 - 2024. All rights reserved.