[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를 참고하시기 바랍니다.