【发布时间】:2016-01-22 19:16:27
【问题描述】:
我正在编写一些代码来将一个字节数组压缩成一个更小的字节数组。然后我想解压:
''' <summary>
''' Receives bytes, returns compressed bytes.
''' </summary>
Function Compress(ByRef raw() As Byte) As Byte()
Using memory As MemoryStream = New MemoryStream()
Using gzip As GZipStream = New GZipStream(memory, CompressionMode.Compress)
gzip.Write(raw, 0, raw.Length)
End Using
Return memory.ToArray()
End Using
End Function
''' <summary>
''' Receives compressed bytes, returns bytes.
''' </summary>
Function DeCompress(ByRef compress() As Byte) As Byte()
Using memory As MemoryStream = New MemoryStream()
Using gzip As GZipStream = New GZipStream(memory, CompressionMode.Decompress)
gzip.Write(compress, 0, compress.Length)
End Using
Return memory.ToArray()
End Using
End Function
(我从here采用了这个代码)
我的压缩代码有效,但我的解压缩代码给出以下错误:
“System.InvalidOperationException”类型的未处理异常 发生在 System.dll 中
附加信息:写入压缩流不是 支持。
我尝试了gzip.Read 的许多变体并交换了变量。 (如果我知道如何查看 VB.NET 内部源代码,就像我可以使用 JDK 一样,也许我可以通过逆向工程找到解决方案,哦,好吧)
如何重新调整我的 DeCompress 函数以按预期工作?
编辑:
我注意到我被否决了,因为我没有展示.Read 方法的使用。好吧,我无法使用 .Read 算法,因为我的 VB.NET 没有 .CopyTo() 函数。我不明白为什么:
【问题讨论】:
-
当你要解压时,你不会写入流,而是从流中读取
-
我写过我尝试过
gzip.Read我不想让我的问题长达 10 页,因为我尝试了各种不同的尝试。感谢您的反对。
标签: .net vb.net gzip gzipstream