1. 개요
이 빠른 사용방법(예제)에서는 Java InputStream 을 Java OutputStream 에 작성하는 방법을 배웁니다 . 먼저 Java 8 및 Java 9의 핵심 기능을 사용할 것입니다. 그런 다음 몇 가지 외부 라이브러리 인 Guava 및 Apache Commons IO 라이브러리를 살펴 보겠습니다 .
Java 9, Guava 및 Apache Commons IO에서 제공하는 유틸리티 메서드는 스트림을 플러시하거나 닫지 않습니다. 따라서 try-with-resources 또는 finally 블록 을 사용하여 이러한 리소스를 관리해야합니다 .
2. Java 8 사용
먼저 바닐라 자바를 사용하여 InputStream 에서 OutputStream으로 콘텐츠를 복사하는 간단한 메서드를 만드는 것으로 시작 합니다 .
void copy(InputStream source, OutputStream target) throws IOException {
byte[] buf = new byte[8192];
int length;
while ((length = source.read(buf)) > 0) {
target.write(buf, 0, length);
}
}
이 코드는 매우 간단합니다. 우리는 단순히 몇 바이트를 읽은 다음 작성합니다.
3. Java 9 사용
Java 9는 이 태스크에 대한 유틸리티 메소드 InputStream.transferTo () 를 제공합니다 .
transferTo () 메서드를 사용하는 방법을 살펴 보겠습니다 .
@Test
public void givenUsingJavaNine_whenCopyingInputStreamToOutputStream_thenCorrect() throws IOException {
String initialString = "Hello World!";
try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes());
ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) {
inputStream.transferTo(targetStream);
assertEquals(initialString, new String(targetStream.toByteArray()));
}
}
파일 스트림으로 작업 할 때는 transferTo () 메서드 보다 Files.copy () 를 사용하는 것이 더 효율적 입니다.
4. 구아바 사용
다음으로 Guava의 유틸리티 메서드 ByteStreams.copy ()를 사용 하는 방법을 살펴 보겠습니다 .
우리는 포함해야합니다 구아바 의존성 우리의 pom.xml 파일을 :
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
ByteStreams 를 사용 하여 데이터를 복사 하는 방법을 보여주는 간단한 테스트 케이스를 만들어 보겠습니다 .
@Test
public void givenUsingGuava_whenCopyingInputStreamToOutputStream_thenCorrect() throws IOException {
String initialString = "Hello World!";
try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes());
ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) {
ByteStreams.copy(inputStream, targetStream);
assertEquals(initialString, new String(targetStream.toByteArray()));
}
}
5. Commons IO 사용
마지막 으로이 작업에 Commons IO IOUtils.copy () 메서드를 사용하는 방법을 살펴 보겠습니다 .
물론 pom.xml에 commons-io 의존성을 추가해야합니다 .
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
IOUtils 를 사용 하여 입력 스트림에서 출력 스트림으로 데이터를 복사 하는 간단한 테스트 케이스를 만들어 보겠습니다 .
@Test
public void givenUsingCommonsIO_whenCopyingInputStreamToOutputStream_thenCorrect() throws IOException {
String initialString = "Hello World!";
try (InputStream inputStream = new ByteArrayInputStream(initialString.getBytes());
ByteArrayOutputStream targetStream = new ByteArrayOutputStream()) {
IOUtils.copy(inputStream, targetStream);
assertEquals(initialString, new String(targetStream.toByteArray()));
}
}
참고 : Commons IO는 InputStream 및 OutputStream 작업을위한 추가 메서드를 제공합니다 . 2GB 이상의 데이터를 복사해야 할 때마다 IOUtils.copyLarge ()를 사용해야합니다.
6. 결론
이 기사에서는 InputStream 에서 OutputStream으로 데이터 를 복사하는 간단한 방법을 살펴 보았습니다 .