Java: Các lớp InflaterInputStream và InflaterOutputStream

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Các lớp InflaterInputStream và InflaterOutputStream được kế thừa từ các lớp FilterInputStream và FilterOutputStream tương ứng.

LớpInflaterInputStream

Lớp InflaterInputStream đọc dữ liệu đã nén và giải nén nó ở định dạng nén "deflate".

Cú pháp :

public InflaterInputStream(InputStream in)

Hàm khởi tạo tạo một dòng đầu vào gồm các byte để đọc dữ liệu nén với bộ giải nén và kích thước bộ đệm mặc định.

Bảng dưới đây liệt kê các phương thức khác nhau có sẵn trong lớp InflaterInputStream cùng với mô tả của chúng.

Phương thức

Mô tả

read()

Trả về một byte dữ liệu đã giải nén được đọc từ luồng đầu vào

read(byte[] buffer, int offset, int buffSize)

Trả về số byte dữ liệu đã giải nén được đọc vào một mảng byte từ vị trí bắt đầu được chỉ định bởi offset và của buffSize long

Các phương thức của mã lớp InflaterInputStream

Đoạn mã 6 cho thấy việc sử dụng các phương thức trong lớp InflaterInputStream.

package solutions;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;

public class InflaterInputStreamApp {
  public static void main(String args[]) {
    try {
      File finf = new File("input.txt");
      FileOutputStream foutWrite = new FileOutputStream(finf);
      File fout = new File("output.txt");
      FileInputStream finRead = new FileInputStream(fout);
      InflaterInputStream defRead = new InflaterInputStream(finRead);
      System.out.println("File size before Inflation " + fout.length());
      // Inflating the file to original size
      int bread = 0;
      while ((bread = defRead.read()) != -1) {
        foutWrite.write(bread);
      }
      foutWrite.close();
      System.out.println("File size after Inflation " + finf.length());
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

Đoạn mã trên tạo ra hai đối tượng File là foutfinf, trong đó fout giữ vị trí của tệp nén và finf giữ vị trí của tệp đã giải nén. Đối tượng fout được truyền dưới dạng tham chiếu đến FileInputStream và đối tượng finf được truyền dưới dạng tham chiếu đến FileOutputStream. Đối tượng InflaterInputStream đọc dữ liệu trong đối tượng FileInputStream, giải nén dữ liệu đã nén, sau đó gọi phương thức write() để ghi dữ liệu đã giải nén vào tệp đầu ra có tên output.txt.

LớpInflaterOutputStream

Lớp InflaterOutputStream đọc dữ liệu đã nén, giải nén dữ liệu được lưu trữ ở định dạng nén deflate, sau đó ghi dữ liệu đã giải nén vào một luồng đầu ra. Lớp này cũng đóng vai trò là lớp cơ sở cho lớp giải nén có tên GZIPInputStream.

Lớp InflaterOutputStream cung cấp các phương thức để giải nén các tệp deflate.

Cú pháp:

public InflaterOutputStream(OutputStream out)

Hàm tạo tạo ra một dòng byte đầu ra để ghi dữ liệu được giải nén với bộ giải nén và kích thước bộ đệm mặc định.

Bảng sau liệt kê các phương thức khác nhau có sẵn trong lớp InflaterOutputStream cùng với mô tả của chúng.

Phương thức

Mô tả

write(int buffer)

Ghi một byte dữ liệu đã giải nén vào đầu ra stream

write(byte[] buffer, int offset, int buffSize)

Ghi một mảng dữ liệu đã giải nén byte vào luồng đầu ra. Ở đây, buffer là dữ liệu đầu vào tính bằng byte, offset là vị trí bắt đầu của dữ liệu đầu vào và buffSize là kích thước của bộ đệm.

close() Đóng luồng đầu ra sau khi ghi dữ liệu chưa nén còn lại
finish() Hoàn thành việc ghi dữ liệu đã giải nén vào luồng đầu ra mà không đóng luồng đầu ra bên dưới

Các phương thức của lớp InflaterOutputStream

Đoạn mã sau thể hiện việc giải nén dữ liệu bằng các phương thức của lớp InflaterOutputStream.

package solutions;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterOutputStream;

public class InflaterOutputStreamApp {
  public static void main(String args[]) {
    try {
      // Writing decompressed data
      File fin = new File("input.txt");
      FileInputStream finWrite = new FileInputStream(fin);
      File fout = new File("output.txt");
      FileOutputStream foutWrite = new FileOutputStream(fout);
      InflaterOutputStream infWrite = new InflaterOutputStream(foutWrite);
      System.out.println("Original file size " + fin.length());
      // Reading and writing the decompressed data
      int bread = 0;
      while ((bread = finWrite.read()) != -1) {
        infWrite.write(bread);
      }
      // Inflating the file to original size
      infWrite.close();
      System.out.println("File size after Inflation " + fout.length());
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

Trong ví dụ trên, đối tượng InflaterOutputStream đọc đối tượng FileOutputStream, nén dữ liệu đầu vào, sau đó gọi phương thức write() để ghi dữ liệu đã giải nén vào tệp đầu ra có tên output.txt.

» Tiếp: Gói java.nio
« Trước: Lớp DeflaterOutputStream
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!