Compresión de objetos en Java con ejemplos

La compresión de objetos es el proceso de reducir el tamaño del objeto con la ayuda de varias clases y métodos. Luego, el receptor recupera la información completa descomprimiendo el objeto que está comprimido por el remitente. Eche un vistazo a la figura a continuación para distinguir el tamaño del archivo antes de comprimirlo y el tamaño del archivo después de comprimirlo:
 

Necesidad de compresión de objetos

La compresión de objetos Java es muy útil en el caso de que necesitemos transferir grandes cantidades de objetos a través de una red. La compresión de objetos se realiza en el lado del remitente y se descomprime en el otro extremo, es decir, en el lado del receptor. Por esto, podemos mejorar el rendimiento y podemos enviar y recibir los objetos en gran cantidad entre dos extremos.
 

Cómo se realiza la compresión de objetos en Java

La compresión de objetos Java se realiza mediante la clase GZIPOutputStream (esta clase implementa un filtro de flujo para escribir datos comprimidos en el formato de archivo GZIP) y lo pasa a la clase ObjectOutputStream (esta clase amplía OutputStream e implementa ObjectOutput , ObjectStreamConstants ) para escribir el objeto en un archivo externo. 

Necesitamos extender la clase Serializable porque el objeto que vamos a comprimir estará representado por el objeto Usuario. Es por eso que necesitamos hacer que el objeto Usuario sea serializable.

Implementación de Compresión de Objetos en Java

Java

// Java Program to demonstrate
// Object Compression
 
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.zip.GZIPOutputStream;
import java.io.File;
 
public class GFG {
 
    public static void main(String args[])
    {
 
        // Creating objects of Java Class Bill
        Bill b1
            = new Bill("176BU", "Abhishek Gupta");
        Bill b2
            = new Bill("176DA", "Sushant Singh");
        FileOutputStream f = null;
 
        // Creates a GZIPOutputStream and
        // initialize it with null
        GZIPOutputStream g = null;
 
        // Creates an ObjectOutputStream and
        // initialise it with null
        // ObjectOutputStream writes to the
        // defined GZIPOutputStream.
        ObjectOutputStream o = null;
 
        // Write path of the file in the argument
        File newFile
            = new File("File.dat");
        try {
 
            // Pass the File object
            // (newFile) to the
            // FileOutputStream
            f = new FileOutputStream(newFile);
            g = new GZIPOutputStream(f);
 
            // Now pass the GZIPOutputStream object
            // to the ObjectOutputStream
            o = new ObjectOutputStream(g);
 
            // Writes the object that are going
            // to be compressed to the
            // ObjectOutputStream using
            // writeObject(objectName)
            o.writeObject(b1);
            o.writeObject(b2);
 
            // flush() API methods of
            // ObjectOutputStream.
            o.flush();
            System.out.println(
                "Process done..");
            System.out.println(
                "Objects are compressed");
        }
        catch (
            FileNotFoundException e) {
 
            // Catch Block
            System.out.println(
                e.message());
        }
        catch (IOException e) {
 
            // Catch Block
            System.out.println(
                e.message());
        }
        finally {
            try {
 
                // Using their
                // close() API methods,
                // closes both
                // the GZIPOutputStream
                // and the
                // ObjectOutputStream
                if (o != null)
                    o.close();
                if (g != null)
                    g.close();
            }
            catch (Exception ex) {
 
                // Catch block
                System.out.println(
                    ex.message());
            }
        }
    }
}
 
class Bill implements Serializable {
 
    // Declaring the private variables
    private String billno;
    private String buyerName;
 
    // Creating constructor
    // of Java Class Bill
    public Bill(
        String bill, String buyer)
    {
        this.billno = bill;
        this.buyerName = buyer;
    }
 
    // Defining methods initializing
    // variables billno and buyerName
    public String getBill()
    {
        return billno;
    }
    public void setBill(
        String billno)
    {
        this.billno = billno;
    }
    public String getBuyerName()
    {
        return buyerName;
    }
    public void setBuyerName(
        String buyer)
    {
        this.buyerName = buyer;
    }
}

Producción:

Process done..
Objects are compressed.

Antes de la compresión de objetos: Después de la compresión de objetos: El tamaño del archivo puede comprimirse hasta un 70 % de su tamaño inicial.

Ventajas

  1. Se puede transferir una gran cantidad de objetos a través de una red sin ningún problema de rendimiento.
  2. No se pierden datos durante el proceso de compresión-descompresión.

Desventaja

  1. Puede llevar tiempo comprimir y descomprimir si el tamaño del archivo es muy grande.

Publicación traducida automáticamente

Artículo escrito por master_abhig y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *