JAVA

[JAVA] InputStream / InputStreamResource

오선지♬ 2024. 10. 2. 21:23
728x90
반응형

1. InputStream

  • 정의:
    • InputStream은 Java에서 바이트 스트림을 읽기 위한 추상 클래스입니다. 주로 파일, 네트워크 소켓, 또는 다른 데이터 소스에서 데이터를 읽는 데 사용됩니다.
  • 용도:
    • 데이터를 바이트 단위로 읽어오기 위해 사용됩니다.
    • 서브클래스인 FileInputStream, ByteArrayInputStream, BufferedInputStream 등을 통해 다양한 소스에서 입력을 처리할 수 있습니다.
InputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read();
while (data != -1) {
    // Process the data
    data = inputStream.read();
}
inputStream.close();

 

2. InputStreamResource

  • 정의:
    • InputStreamResource는 Spring Framework에서 제공하는 클래스입니다. InputStream의 래퍼 클래스이며, Spring의 Resource 인터페이스를 구현합니다. 이 클래스는 Spring의 다양한 기능과 통합될 수 있도록 설계되었습니다.
  • 용도:
    • InputStream을 래핑하여 Spring MVC 또는 Spring의 다른 기능(예: 파일 다운로드, HTTP 응답 등)에서 사용할 수 있도록 합니다.
    • Spring에서 파일 다운로드나 스트림을 반환하는 컨트롤러 메소드에서 주로 사용됩니다.
import org.springframework.core.io.InputStreamResource;

public ResponseEntity<InputStreamResource> downloadFile() {
    InputStream inputStream = new FileInputStream("example.txt");
    InputStreamResource resource = new InputStreamResource(inputStream);
    
    return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"example.txt\"")
            .contentType(MediaType.APPLICATION_OCTET_STREAM)
            .body(resource);
}

 

3. 주요 차이점

특성InputStreamInputStreamResource

정의 바이트 단위의 데이터를 읽기 위한 기본 클래스 InputStream의 래퍼로 Spring에서 사용
용도 데이터 소스에서 직접 바이트를 읽기 위해 사용 Spring MVC에서 응답으로 파일 다운로드 또는 스트림을 반환하기 위해 사용
의존성 Java 표준 라이브러리의 일부 Spring Framework의 일부
기능 기본적인 입출력 처리 Spring의 Resource 기능을 활용할 수 있음

결론

  • InputStream: 파일이나 소스에서 바이트 데이터를 직접 읽고 처리하는 데 사용됩니다.
  • InputStreamResource: Spring 프레임워크와 함께 사용되며, InputStream을 래핑하여 더 높은 수준의 추상화를 제공합니다. Spring MVC에서 파일 다운로드와 같은 용도로 사용됩니다.

둘 다 유용한 도구이지만, 사용되는 맥락에 따라 적절한 클래스를 선택하는 것이 중요합니다.

728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 제네릭을 사용하는 이유  (1) 2024.10.06
[JAVA] Desktop Class  (1) 2024.10.03
[JAVA] URLEncoder java.net/ apache 차이  (0) 2024.10.01
[JAVA] 문자열 날짜를 LocalDate로 날짜 차이 구하기  (0) 2024.09.22
[JAVA] DecimalFormat  (0) 2024.09.21