■2755 / inTopicNo.1) |
GZIP圧縮/解凍にて解凍ができない |
□投稿者/ 小倉 (1回)-(2007/04/15(Sun) 18:00:42)
|
分類:[VB.NET (Windows)]
はじめまして、小倉と申します。
表題の件質問させて頂きます。
このサイト http://www.atmarkit.co.jp/fdotnet/dotnettips/485gzipstream/gzipstream.html
を参考に、TextBox1の内容を圧縮/解凍してその結果をTextBox2へ書き込むプログラムを作成
したのですが、解凍時の解凍ストリームdecompStreamからの読み出しができません(num=0)。
入力ストリームは inMs.Length=inByte.Length, inMs.Position=0 になっていて問題ないと思
いますが、メモリストリームの使い方が悪いのでしょうか。よろしくお願いします。
'GZIP圧縮/解凍
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim gz As New Gzip
'圧縮
Dim cmpByte As Byte() = gz.Compress(Me.TextBox1.Text)
'解凍
Me.TextBox2.Text = gz.Decompress(cmpByte)
End Sub
'圧縮/解凍
Public Class Gzip
'圧縮
Public Function Compress(ByVal inText As String) As Byte()
Dim inByte() As Byte = Encoding.Unicode.GetBytes(inText)
Dim num As Integer
Dim buf(1024) As Byte ' 1Kbytesずつ処理する
' 入力ストリーム
Dim inMs As New MemoryStream(inByte)
' 出力ストリーム
Dim outMs As New MemoryStream()
' 圧縮ストリーム
Dim compStream As New GZipStream(outMs, CompressionMode.Compress)
Using inMs
Using outMs
Using compStream
Do
num = inMs.Read(buf, 0, buf.Length)
If num <= 0 Then Exit Do
compStream.Write(buf, 0, num)
Loop
Return outMs.ToArray
End Using
End Using
End Using
End Function
'解凍
Public Function Decompress(ByVal inByte As Byte()) As String
Dim num As Integer
Dim buf(1024) As Byte ' 1Kbytesずつ処理する
' 入力ストリーム
Dim inMs As New MemoryStream(inByte)
' 解凍ストリーム
Dim decompStream As New GZipStream(inMs, CompressionMode.Decompress)
' 出力ストリーム
Dim outMs As New MemoryStream()
Using inMs
Using outMs
Using decompStream
Do
num = decompStream.Read(buf, 0, buf.Length)
If num <= 0 Then Exit Do
outMs.Write(buf, 0, num)
Loop
Return Encoding.Unicode.GetString(outMs.ToArray)
End Using
End Using
End Using
End Function
End Class
|
|