입력 스트림에 액세스하면 로컬 파일에서 InputStream과 유사하게 읽을 수 있습니다. 파일을 다운로드하는 첫 번째 단계는 서버에 요청을 발행하는 HTTP 클라이언트 개체를 만드는 것입니다. 이를 위해 CloseableHttpClient 클래스를 사용할 것입니다. CloseableHttpClient 클래스는 HttpClientBuilder 클래스가 인스턴스를 만들어야 하는 추상 클래스입니다. 새 HTTP 클라이언트를 만드는 코드 코드 조각은 다음과 같습니다: 가장 일반적인 구현은 읽기/쓰기 작업을 수행할 때 바이트를 버퍼링하는 구현입니다. 이 구현은 전체 파일을 메모리에 로드하지 않으므로 대용량 파일에서도 안전하게 사용할 수 있습니다. 여러 웹 사이트는 Http를 통해 서비스를 제공합니다. 예를 들어 get 요청을 “http://tinyurl” 또는 http://tr.im”으로 보내고 매개 변수로 전달하는 URL의 짧은 버전을 받을 수 있습니다. 다음은 Java를 통해 “http://TinyUrl” 또는 “http://tr.im”에서 get 서비스를 호출하는 방법을 보여 줍니다. Java 프로젝트 “de.vogella.web.get”을 만들고 getService를 호출하고 결과를 반환하는 다음 클래스를 만듭니다. Java NIO는 Java에서 네트워킹 및 입력 출력 작업을 처리하는 대체 패키지입니다. Java NIO 패키지가 제공하는 주요 장점은 비차단이며 채널링 및 버퍼링 기능이 있다는 것입니다.
Java IO 라이브러리를 사용할 때 바이트별로 데이터 바이트를 읽는 스트림으로 작업합니다. 그러나 Java NIO 패키지는 채널과 버퍼를 사용합니다. 버퍼링 및 채널링 기능을 통해 시스템은 중간 단계인 응용 프로그램 메모리에 바이트를 저장할 필요 없이 URL에서 의도한 파일에 직접 내용을 복사할 수 있습니다. 채널로 작업할 수 있는 기능은 성능을 향상시킵니다. 또한 일반적으로 파일을 다운로드하는 작업은 HTTP를 통해 수행되므로 AsyncHttpClient 라이브러리를 사용하여 이 작업을 수행하는 방법을 보여 주어 도왔습니다. IO 작업에 매우 많이 사용되는 또 다른 라이브러리는 아파치 커먼스 IO입니다. Javadoc에서 일반 파일 조작 작업에 사용되는 FileUtils라는 유틸리티 클래스가 있음을 알 수 있습니다. 파일을 다운로드하는 데 사용할 수 있는 가장 기본적인 API는 Java IO입니다. URL 클래스를 사용하여 다운로드하려는 파일에 대한 연결을 열 수 있습니다.
파일을 효과적으로 읽으려면 openStream() 메서드를 사용하여 InputStream을 얻습니다. 위의 예는 매우 상세하지만 다행히도 Java 7에서는 IO 작업을 처리하기위한 도우미 메서드가 들어있는 Files 클래스가 있습니다. Files.copy() 메서드를 사용하여 InputStream에서 모든 바이트를 읽고 로컬 파일로 복사할 수 있습니다. 변수 i의 값이 -1이면 파일의 내용이 2GB를 초과했음을 나타냅니다. 반환된 값이 -1이면 함수 copyLarge(inputStream, fileOS) 함수대신 복사(inputStream, fileOS) 함수를 사용하여 이 부하를 처리할 수 있습니다. 이 두 함수는 모두 내부적으로 입력 스트림을 버퍼링합니다. 내부 버퍼는 코드 성능을 향상시키기 위해 BufferedInputStream 클래스를 사용할 필요가 없으며 상용구 코드를 작성하지 않도록 도와줍니다. 인코딩 수락 요청 헤더를 설정하면 자동 압축 해제가 명시적으로 비활성화되고 응답 헤더는 그대로 유지됩니다. 호출자는 응답의 콘텐츠 인코딩 헤더에 따라 필요에 따라 압축 해제를 처리해야 합니다. Java NIO 패키지는 응용 프로그램 메모리로 버퍼링하지 않고 2채널 간에 바이트를 전송할 수 있는 가능성을 제공합니다. 코드 줄 수를 낮추려면 Java 7에서 사용할 수 있는 Files 클래스를 사용할 수 있습니다. Files 클래스에는 모든 바이트를 한 번에 읽은 다음 다른 파일로 복사하는 메서드가 포함되어 있습니다.
출력 스트리밍을 사용하도록 설정하면 인증 및 리디렉션을 자동으로 처리할 수 없습니다. 인증 또는 리디렉션이 필요한 경우 응답을 읽을 때 HttpRetryException이 throw됩니다. 이 예외는 오류의 세부 정보에 대해 쿼리할 수 있습니다.