GzipStream的簡單使用壓縮和解壓


壓縮和解壓都需要用到三個流實例,分別是文件讀取流、文件寫入流、壓縮流。

讀取流和寫入流有多種形式,壓縮流就一種GzipStream。

 

不同的是對於壓縮,是需要用文件寫入流作為創建壓縮流實例的參數,

壓縮時是通過文件讀取流讀取文件,壓縮流寫入文件,這樣就完成了壓縮。

 

解壓,是需要用文件讀取流為參數創建壓縮流實例,

通過壓縮讀取流讀取文件,再通過文件寫入流寫入文件,這樣就完成了解壓。

這里解析一個枚舉CompressionMode,它有兩個值分別是Compress、DeCompress。

表示壓縮和解壓,在創建壓縮流實例的時候會用到。

代碼解析

壓縮

            //1.創建讀取文本文件的流
            using (FileStream fsRead = File.OpenRead("1.txt"))
            {
                //2.創建寫文件流
                using (FileStream fsWrite = File.OpenWrite(@"C:\Users\john\Desktop\yasuo.rar"))
                {
                    //3.創建壓縮流
                    using (GZipStream zipStream = new GZipStream(fsWrite, CompressionMode.Compress))
                    {     
                        byte[] byts = new byte[1024];
                        int len = 0;
                        //4.通過讀取文件流讀取數據
                        while ((len = fsRead.Read(byts, 0, byts.Length)) > 0)
                        {
                            
                                //通過壓縮流寫入數據
                                zipStream.Write(byts, 0, len);
                            
                        }
                    }
                }
            }

  解壓

            //1.創建讀取流
            using (FileStream fsRead = File.OpenRead(@"C:\Users\john\Desktop\yasuo.rar"))
            {
                //2.創建壓縮流,把讀取流作為參數,
                using (GZipStream zip = new GZipStream(fsRead, CompressionMode.Decompress))
                {
                    //創建寫入流
                    using (FileStream fsWrite=File.OpenWrite(@"C:\Users\john\Desktop\1.txt"))
                    {
                        byte[] byts = new byte[1024];
                        int len = 0;//用於表示真是接受到是字節個數
                        //通過壓縮流讀取數據
                        while ((len=zip.Read(byts,0,byts.Length))>0)
                        {
                            //MessageBox.Show(Encoding.UTF8.GetString(byts.Take(len).ToArray()));
                            //通過文件流寫入文件
                            fsWrite.Write(byts, 0, len);//讀取的長度為len,這樣不會造成數據的錯誤
                        }
                    }
                }

            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM