[java] 자바로 압축된 데이터를 네트워크로 전송하는 방법
애플리케이션에서 데이터를 전송할 때, 데이터를 압축하여 전송하면 대역폭을 절약하고 전송 시간을 단축할 수 있습니다. 자바에서는 java.util.zip
패키지를 사용하여 데이터를 압축하고, java.net
패키지를 사용하여 압축된 데이터를 네트워크로 전송할 수 있습니다. 이제 자세한 방법을 살펴보겠습니다.
1. 데이터 압축하기
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
public class DataCompressor {
public static byte[] compressData(byte[] data) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Deflater deflater = new Deflater();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(outputStream, deflater);
deflaterOutputStream.write(data);
deflaterOutputStream.close();
return outputStream.toByteArray();
}
}
위의 코드는 compressData
메서드를 사용하여 데이터를 압축하는 예제입니다. Deflater
클래스를 사용하여 데이터를 압축하고, DeflaterOutputStream
클래스를 사용하여 압축 결과를 출력 스트림에 쓸 수 있습니다. 압축된 데이터는 outputStream.toByteArray()
를 통해 byte 배열로 얻을 수 있습니다.
2. 압축된 데이터 전송하기
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class DataSender {
public static void sendData(byte[] compressedData, String host, int port) throws IOException {
Socket socket = new Socket(host, port);
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.write(compressedData);
dataOutputStream.close();
socket.close();
}
}
위의 코드는 sendData
메서드를 사용하여 압축된 데이터를 네트워크로 전송하는 예제입니다. Socket
과 DataOutputStream
클래스를 사용하여 소켓 연결을 생성하고, write
메서드를 통해 압축된 데이터를 전송합니다.
사용 예시
public class Main {
public static void main(String[] args) {
try {
byte[] data = "Hello, world!".getBytes();
byte[] compressedData = DataCompressor.compressData(data);
DataSender.sendData(compressedData, "127.0.0.1", 8080);
} catch (IOException e) {
e.printStackTrace();
}
}
}
위의 코드는 데이터를 압축하고, 압축된 데이터를 지정한 호스트와 포트로 전송하는 예시입니다. 127.0.0.1
은 로컬호스트, 8080
은 포트 번호로 변경하여 실제 사용하시면 됩니다.
자바를 사용하여 데이터를 압축하고 네트워크로 전송하는 방법을 알아봤습니다. 이는 대규모 데이터를 전송해야하는 경우나 네트워크 대역폭이 제한적인 경우 유용한 기술입니다. 추가적인 기능이나 보안을 위해 더 많은 사항을 고려해야 할 수도 있으니 참고하시기 바랍니다.
참고 자료: