1 #Region "Microsoft.VisualBasic::0b7b81e42b19b25de9d6efeff406072a, Microsoft.VisualBasic.Core\Extensions\WebServices\Http\GZStream.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module GZStream
35     
36     '         Function: UnzipBase64, UnzipStream, ZipAsBase64, ZipStream
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.IO
44 Imports System.IO.Compression
45 Imports System.Runtime.CompilerServices
46
47 Namespace Net.Http
48
49     Public Module GZStream
50
51         ''' <summary>
52         ''' Unzip the stream data in the <paramref name="base64"/> string.
53         ''' </summary>
54         ''' <param name="base64$"></param>
55         ''' <returns></returns>
56         ''' 
57         <MethodImpl(MethodImplOptions.AggressiveInlining)>
58         <Extension>
59         Public Function UnzipBase64(base64$) As MemoryStream
60             Return Convert.FromBase64String(base64).UnzipStream
61         End Function
62
63         <Extension>
64         Public Function UnzipStream(stream As IEnumerable(Of Byte)) As MemoryStream
65             Dim ms As New MemoryStream
66             Dim gz As New GZipStream(New MemoryStream(stream.ToArray), CompressionMode.Decompress)
67             Call gz.CopyTo(ms)
68             Return ms
69         End Function
70
71         <Extension>
72         Public Function ZipStream(stream As Stream) As MemoryStream
73             Dim ms As New MemoryStream
74             Dim gz As New GZipStream(ms, CompressionMode.Compress)
75             Call stream.CopyTo(gz)
76             Return ms
77         End Function
78
79         ''' <summary>
80         ''' 将目标流对象之中的数据进行zip压缩,然后转换为base64字符串
81         ''' </summary>
82         ''' <param name="stream"></param>
83         ''' <returns></returns>
84         <Extension> Public Function ZipAsBase64(stream As Stream) As String
85             Dim bytes As Byte() = stream.ZipStream.ToArray
86             Dim s$ = Convert.ToBase64String(bytes)
87             Return s
88         End Function
89     End Module
90 End Namespace