在C#和VB.NET中,使用SharpZipLib对流进行放气具有不同的行为

在C#和VB.NET中,使用SharpZipLib对流进行放气具有不同的行为,c#,.net,vb.net,stream,sharpziplib,C#,.net,Vb.net,Stream,Sharpziplib,我在编写静态Deflate扩展方法时遇到了问题,我将使用SharpZipLib库(运行时版本:v2.0.50727)的BZip2算法对字符串进行Deflate 我使用的是.NETFramework4 这是我的VB.NET代码: Public Function Deflate(ByVal text As String) Try Dim compressedData As Byte() = Convert.FromBase64String(text) Sys

我在编写静态Deflate扩展方法时遇到了问题,我将使用SharpZipLib库(运行时版本:v2.0.50727)的BZip2算法对字符串进行Deflate

我使用的是.NETFramework4

这是我的VB.NET代码:

Public Function Deflate(ByVal text As String)
    Try
        Dim compressedData As Byte() = Convert.FromBase64String(text)

        System.Diagnostics.Debug.WriteLine(String.Concat("Compressed text data size: ", text.Length.ToString()))
        System.Diagnostics.Debug.WriteLine(String.Concat("Compressed byte data size: ", compressedData.Length.ToString()))

        Using compressedStream As MemoryStream = New MemoryStream(compressedData)
            Using decompressionStream As BZip2OutputStream = New BZip2OutputStream(compressedStream)
                Dim cleanData() As Byte

                Using decompressedStream As MemoryStream = New MemoryStream()
                    decompressionStream.CopyTo(decompressedStream) // HERE THE ERROR!

                    cleanData = decompressedStream.ToArray()
                End Using

                decompressionStream.Close()
                compressedStream.Close()

                Dim cleanText As String = Encoding.UTF8.GetString(cleanData, 0, cleanData.Length)

                System.Diagnostics.Debug.WriteLine(String.Concat("After decompression text data size: ", cleanText.Length.ToString()))
                System.Diagnostics.Debug.WriteLine(String.Concat("After decompression byte data size: ", cleanData.Length.ToString()))

                Return cleanText
            End Using
        End Using
    Catch
        Return String.Empty
    End Try
End Function
奇怪的是,我用同样的方法写了一个C#副本,它工作得非常完美!!!代码如下:

public static string Deflate(this string text)
{
        try
        {

            byte[] compressedData = Convert.FromBase64String(text);

            System.Diagnostics.Debug.WriteLine(String.Concat("Compressed text data size: ", text.Length.ToString()));
            System.Diagnostics.Debug.WriteLine(String.Concat("Compressed byte data size: ", compressedData.Length.ToString()));

            using (MemoryStream compressedStream = new MemoryStream(compressedData))
            using (BZip2InputStream decompressionStream = new BZip2InputStream(compressedStream))
            {
                byte[] cleanData;

                using (MemoryStream decompressedStream = new MemoryStream())
                {
                    decompressionStream.CopyTo(decompressedStream);

                    cleanData = decompressedStream.ToArray();
                }

                decompressionStream.Close();
                compressedStream.Close();

                string cleanText = Encoding.UTF8.GetString(cleanData, 0, cleanData.Length);

                System.Diagnostics.Debug.WriteLine(String.Concat("After decompression text data size: ", cleanText.Length.ToString()));
                System.Diagnostics.Debug.WriteLine(String.Concat("After decompression byte data size: ", cleanData.Length.ToString()));

                return cleanText;
            }

        }
        catch(Exception e)
        {
            return String.Empty;
        }
}
在VB.NET版本中,我遇到这样的错误:“流不支持读取。”(请参阅代码以了解它的来源!)

哪里错了?!!我不明白这两种方法有什么区别


多谢各位

一个现场游戏的区别在于,第一个游戏使用的是
BZip2OutputStream
,而第二个游戏使用的是
BZip2InputStream

输出流用于写入,因此它所说的是不可读的,这似乎是合理的


值得一提的是,有很多很好的比较工具。它们不会处理不同的语法,但当您使用完全不同的对象时(至少在本例中),匹配的工作方式会非常好地显示出来。我个人使用并推荐的是一款现场游戏。不同之处在于,第一款游戏使用的是
BZip2OutputStream
,而第二款游戏使用的是
BZip2InputStream

输出流用于写入,因此它所说的是不可读的,这似乎是合理的


值得一提的是,有很多很好的比较工具。它们不会处理不同的语法,但当您使用完全不同的对象时(至少在本例中),匹配的工作方式会非常好地显示出来。我个人使用并推荐的一个是您在一个版本中切换了
BZip2OutputStream
BZip2InputStream
您在另一个版本中切换了
BZip2OutputStream
BZip2InputStream
,您在一个版本中使用的是
BZip2InputStream
你正在使用一个
bzip2输入流
,而在另一个
bzip2输出流

中,你没有说VB版本中失败的东西…我刚刚编辑了我的问题,谢谢。我刚刚编辑了我的问题,谢谢。很好的一个@Chris,比我快7秒!有一个安慰+1无论如何。;-)不错的一个@Chris,比我快7秒!有一个安慰+1无论如何。;-)对不起,也许这是个愚蠢的问题,但我真的被它弄疯了…非常感谢你让我睁开眼睛!!!对不起,也许这是个愚蠢的问题,但我真的被它弄疯了…非常感谢你让我睁开眼睛!!!