[java] 소켓 통신에서의 데이터 압축과 해제 기법

이번 포스트에서는 자바 소켓 통신에서 데이터를 압축하고 해제하는 방법에 대해 알아보겠습니다.

소켓 통신에서 데이터 압축

데이터를 전송하기 전에 압축하여 전송하면 네트워크 대역폭을 절약할 수 있습니다. Java에서는 java.util.zip 패키지를 이용하여 데이터를 압축할 수 있습니다. 아래는 간단한 예제 코드입니다.

import java.io.*;
import java.net.Socket;
import java.util.zip.DeflaterOutputStream;

public class CompressedDataSender {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);
        OutputStream os = socket.getOutputStream();
        DeflaterOutputStream dos = new DeflaterOutputStream(os);
        
        // 데이터를 압축하여 전송
        dos.write("Hello, World!".getBytes());
        
        dos.close();
        socket.close();
    }
}

위 코드에서는 DeflaterOutputStream을 사용하여 데이터를 압축하여 전송합니다.

소켓 통신에서 데이터 해제

데이터를 전송 받은 후에는 해당 데이터를 해제하여 처리해야 합니다. Java에서는 java.util.zip 패키지를 이용하여 데이터를 해제할 수 있습니다. 아래는 데이터를 받아 해제하는 간단한 예제 코드입니다.

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.zip.InflaterInputStream;

public class DecompressedDataReceiver {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        Socket socket = serverSocket.accept();
        InputStream is = socket.getInputStream();
        InflaterInputStream iis = new InflaterInputStream(is);
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = iis.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }
        
        // 압축 해제된 데이터 출력
        System.out.println(new String(baos.toByteArray()));
        
        iis.close();
        socket.close();
        serverSocket.close();
    }
}

위 코드에서는 InflaterInputStream을 사용하여 데이터를 해제하여 출력합니다.

이와 같이, 소켓 통신에서 데이터를 압축하고 해제하는 방법을 간단한 예제와 함께 살펴보았습니다.

더 자세한 내용은 Oracle Java Documentation를 참고하시기 바랍니다.