/ / Cách nén và giải nén tệp trong Golang

Cách nén và giải nén tệp trong Golang

Thuật toán Gzip và Zlib được sử dụng phổ biến để nén và giải nén tệp tin. Gzip chủ yếu được sử dụng để nén các tệp đơn lẻ, trong khi Zlib chủ yếu nén các luồng dữ liệu. Các thuật toán sử dụng Thuật toán nén Deflate để nén, mặc dù Gzip cung cấp các tính năng bổ sung bao gồm kiểm tra lỗi và siêu dữ liệu tệp.


Gzip đã cung cấp tỷ lệ nén tốt hơn Zlib. Tuy nhiên, Gzip yêu cầu nhiều sức mạnh xử lý hơn để nén và giải nén dữ liệu. Trong hầu hết các trường hợp, bạn nên sử dụng Gzip để nén tệp và Zlib để nén luồng dữ liệu.

Go cung cấp chức năng nén dữ liệu, bao gồm các tệp thông qua nén bưu kiện.


Gói nén

nội dung của gói nén

Các nén gói hỗ trợ nén dữ liệu thông qua nén/gzipnén/zlib gói, trong số các chức năng khác.

Các gzip gói hỗ trợ nén và giải nén dữ liệu định dạng tệp gzip, bao gồm các thao tác đọc và ghi như được chỉ định trong RFC 1952. Trong khi zlib gói giúp nén và giải nén dữ liệu ở định dạng zlib.

Bạn có thể nhập khẩu gzipzlib từ nén gói sử dụng nhập khẩu từ khóa.

 import (
    "compress/gzip"

    "compress/zlib"
)

Nén và giải nén file bằng Gzip

Gzip là một định dạng tệp và một ứng dụng phần mềm để nén và giải nén tệp. Gzip sử dụng thuật toán chuỗi Lempel-Ziv-Markov (LZ77) để nén dữ liệu và thuật toán này thường được sử dụng để nén các tệp văn bản, chẳng hạn như tệp HTML, CSS hoặc JavaScript.

Quá trình nén tập tin với gzip gói đơn giản và trực quan. Bạn sẽ cần mở tệp, tạo tệp được nén, tạo trình ghi gzip và sao chép nội dung của tệp gốc vào trình ghi gzip trước khi thực hiện thao tác xóa để đảm bảo quá trình ghi hoàn tất.

Chạy lệnh bash này trong thiết bị đầu cuối của thư mục làm việc của bạn trên các hệ thống Unix để tạo một tệp văn bản mẫu và sau đó chèn văn bản vào tệp.

 // creates a text file.
touch example.txt

// pipes the string to the file
echo 'Hello, world!' > example.txt}

Sau khi tạo tệp và chèn văn bản, bạn có thể nhập tệp gzip, tôi,hệ điều hành gói cho hoạt động nén.

Đây là cách bạn có thể sử dụng nén/gzip gói để nén một tập tin văn bản.

 import (
    "compress/gzip"
    "io"
    "os"
)

func main() {
    
    originalFile, err := os.Open("example.txt")
    if err != nil {
        panic(err)
    }
    defer originalFile.Close()

    
    gzippedFile, err := os.Create("example.txt.gz")
    if err != nil {
        panic(err)
    }
    defer gzippedFile.Close()

    
    gzipWriter := gzip.NewWriter(gzippedFile)
    defer gzipWriter.Close()

    
    _, err = io.Copy(gzipWriter, originalFile)
    if err != nil {
        panic(err)
    }

    
    gzipWriter.Flush()
}

Các Mở chức năng của hệ điều hành gói sẽ mở tệp văn bản và Đóng chức năng đóng tệp bằng một hoãn lại tuyên bố. Các Tạo nên chức năng tạo một tệp được nén và Người viết mới chức năng của gzip gói ghi nội dung của tệp văn bản vào tệp gzip bằng cách sử dụng Sao chép chức năng của io bưu kiện.

Các Tuôn ra phương pháp của gzipWriter phiên bản xóa trình ghi gzip sau khi tất cả dữ liệu có sẵn trên tệp nén.

Bạn có thể truy xuất tệp gốc từ tệp gzipped thông qua quá trình giải nén. Quá trình giải nén một tập tin cũng tương tự; bạn sẽ mở tệp và tạo một trình đọc tệp gzip, sau đó tạo một tệp mới để chứa dữ liệu không nén trước khi sao chép nội dung vào tệp mới.

 import (
    "compress/gzip"
    "io"
    "os"
)

func main() {
    
    gzippedFile, err := os.Open("example.txt.gz")
    if err != nil {
        panic(err)
    }
    defer gzippedFile.Close()

    
    gzipReader, err := gzip.NewReader(gzippedFile)
    defer gzipReader.Close()

    
    uncompressedFile, err := os.Create("example.txt")
    if err != nil {
        panic(err)
    }
    defer uncompressedFile.Close()

    
    _, err = io.Copy(uncompressedFile, gzipReader)
    if err != nil {
        panic(err)
    }
}

Các Mở chức năng của hệ điều hành gói sẽ mở tệp được nén và Trình đọc mới chức năng của gzip gói đọc tệp nén. Các Tạo nên chức năng của hệ điều hành gói tạo một tệp văn bản mới. Các Sao chép chức năng sao chép nội dung của gzipReader đến tập tin không nén.

Nén và giải nén dữ liệu với Zlib

Zlib là thư viện nén và giải nén dữ liệu; thư viện cũng sử dụng thuật toán LZ77. Zlib được viết bằng C và được sử dụng rộng rãi làm cơ sở cho các phần mềm và thư viện nén khác. không giống gzip, zlib là một thư viện, và zlib không bao gồm một định dạng tập tin. Tuy nhiên, nó thường được sử dụng để nén dữ liệu được lưu trữ ở định dạng vùng chứa, chẳng hạn như PNG hoặc HTTP.

Quá trình nén bằng zlib cũng giống như đối với gzip. Bạn sẽ tạo một tệp zlib, định cấu hình trình ghi, mở tệp gốc và sao chép nội dung vào tệp nén.

 import (
   "compress/zlib"
   "io"
   "os"
)

func main() {
   
   file, err := os.Create("example.zlib")
   
   if err != nil {
       panic(err)
   }
   
   defer file.Close()

   
   writer, err := zlib.NewWriterLevel(file, zlib.BestCompression)
   
   if err != nil {
       panic(err)
   }
   
   defer writer.Close()

   
   inputFile, err := os.Open("example.txt")
   
   if err != nil {
       panic(err)
   }
   
   defer inputFile.Close()

   
   io.Copy(writer, inputFile)
}

Các Tạo nên phương thức tạo tệp zlib và Cấp độ nhà văn mới chức năng tạo một trình ghi cho tệp với tùy chọn đã chỉ định (trong trường hợp này, Nén tốt nhất lựa chọn). Các Mở phương pháp của hệ điều hành gói sẽ mở tệp văn bản và Sao chép chức năng của io gói sao chép nội dung của tệp văn bản vào tệp zlib trong quá trình nén.

Để giải nén tệp zlib, bạn cần mở tệp nén, tạo trình đọc zlib mới, sau đó sao chép nội dung của trình đọc sang đầu ra tiêu chuẩn.

 import (
   "compress/zlib"
   "io"
   "os"
)

func main() {
   
   file, err := os.Open("compressed_file.zlib")
   
   if err != nil {
       panic(err)
   }
   
   defer file.Close()

   
   reader, err := zlib.NewReader(file)
   
   if err != nil {
       panic(err)
   }
   
   defer reader.Close()

   
   io.Copy(os.Stdout, reader)
}

Chức năng chính mở tệp zlib bằng hệ điều hành gói của Mở chức năng, và Trình đọc mới chức năng của zlib gói đọc tệp zlib vào một phiên bản trình đọc. Các Sao chép phương pháp của io gói sao chép nội dung từ đầu đọc sang đầu ra tiêu chuẩn (trong trường hợp này là bảng điều khiển).

đầu ra của văn bản trong tệp nén

Viết mã để nén tệp rất hữu ích để tự động hóa các tác vụ và nén một số tệp. Nếu bạn chỉ cần nén một vài tệp, bạn có thể sử dụng các ứng dụng như WinRar, WinZip, Express Zip và Bandizip.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *