>  기사  >  Java  >  입력 스트림을 수정하지 않고 여러 번 읽는 방법은 무엇입니까?

입력 스트림을 수정하지 않고 여러 번 읽는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 04:36:31362검색

How to Read from an Input Stream Multiple Times Without Modifying it?

순차 읽기를 위해 입력 스트림 보존

입력 스트림을 수정하거나 새 스트림을 생성하지 않고 입력 스트림에서 여러 번 읽는 것이 특정 상황에서 필요할 수 있습니다. 이미지를 다운로드하고 로컬에 저장하는 경우와 같은 시나리오. 다행스럽게도 반복 액세스를 위해 입력 스트림을 복제할 수 있습니다.

한 가지 접근 방식은 org.apache.commons.io.IOUtils.copy 메소드를 활용하여 입력 스트림 콘텐츠를 바이트 배열로 전송하는 것입니다. 그런 다음 ByteArrayInputStream을 사용하여 이 바이트 배열을 반복적으로 읽을 수 있습니다.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

여기서 다음 접근 방식 중 하나를 따를 수 있습니다.

  • ByteArrayInputStream의 반복 생성:

    while (needToReadAgain) {
      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      yourReadMethodHere(bais);
    }
  • ByteArrayInputStream 재설정:

    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    while (needToReadAgain) {
      bais.reset();
      yourReadMethodHere(bais);
    }

주의: 전체 스트림을 메모리에 복사하는 것은 잠재적인 메모리 고갈로 인해 대규모 또는 무한 스트림에 적합하지 않을 수 있습니다. 이러한 경우에는 버퍼나 별도의 데이터 구조를 사용하는 등의 대체 접근 방식이 필요할 수 있습니다.

위 내용은 입력 스트림을 수정하지 않고 여러 번 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.