[java] 파일을 압축해서 전송하는 자바 네트워크 프로그래밍
이번 글에서는 자바 네트워크 프로그래밍을 사용하여 파일을 압축해서 전송하는 방법에 대해 알아보겠습니다. 파일 전송 시에는 압축을 사용하면 전송 시간을 단축시킬 수 있고, 전송량을 줄여 네트워크 자원을 효율적으로 사용할 수 있습니다.
1. 파일 압축을 위한 라이브러리 추가하기
자바에서 파일을 압축하기 위해서는 java.util.zip
패키지에 있는 ZipOutputStream
클래스를 사용할 수 있습니다. 따라서 우선 이 클래스를 사용하기 위해 프로젝트에 해당 라이브러리를 추가해야 합니다. 이를 위해 프로젝트의 pom.xml
파일에 다음과 같은 의존성을 추가해주세요:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
2. 파일 압축하기
파일을 압축하기 위해서는 다음과 같은 단계를 따라야 합니다:
ZipOutputStream
객체를 생성합니다.- 압축 파일(.zip)의 경로와 이름을 설정합니다.
- 압축할 파일들을 추가합니다.
ZipOutputStream
을 닫아 압축 작업을 마무리합니다.
다음은 위 단계를 구현한 예제 코드입니다:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompressionExample {
public static void main(String[] args) {
String[] filesToCompress = {"file1.txt", "file2.txt"};
String zipFileName = "compressed.zip";
try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFileName))) {
byte[] buffer = new byte[1024];
for (String file : filesToCompress) {
File inputFile = new File(file);
FileInputStream fis = new FileInputStream(inputFile);
zipOut.putNextEntry(new ZipEntry(inputFile.getName()));
int len;
while ((len = fis.read(buffer)) > 0) {
zipOut.write(buffer, 0, len);
}
fis.close();
zipOut.closeEntry();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 압축 파일 전송하기
파일을 압축한 후에는 네트워크를 통해 해당 압축 파일을 전송해야 합니다. 이를 위해서는 소켓 프로그래밍을 사용하여 클라이언트와 서버 간의 통신을 구현해야 합니다. 자바의 java.net
패키지를 사용하여 클라이언트와 서버 프로그램을 개발할 수 있습니다.
압축 파일을 전송하는 과정은 다음과 같습니다:
- 클라이언트 프로그램에서 압축 파일을 서버 소켓에 전송합니다.
- 서버 프로그램에서 소켓을 통해 압축 파일을 수신합니다.
압축 파일 전송을 위한 자세한 예제 코드는 다음 링크를 참고해주세요: Java Socket Programming Example
본 포스트에서는 파일을 압축해서 전송하는 자바 네트워크 프로그래밍 방법을 알아보았습니다. 파일 전송 시에는 압축을 사용하여 전송 시간과 전송량을 효율적으로 관리할 수 있습니다.