在C#和VB.NET中,使用SharpZipLib对流进行放气具有不同的行为
我在编写静态Deflate扩展方法时遇到了问题,我将使用SharpZipLib库(运行时版本:v2.0.50727)的BZip2算法对字符串进行Deflate 我使用的是.NETFramework4 这是我的VB.NET代码:在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
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无论如何。;-)对不起,也许这是个愚蠢的问题,但我真的被它弄疯了…非常感谢你让我睁开眼睛!!!对不起,也许这是个愚蠢的问题,但我真的被它弄疯了…非常感谢你让我睁开眼睛!!!