UrlConnection 은 메모리에 모든 output data를 저장하고 , writting 작업이 끝나면 그때서야 네트워크로 보내기 때문에

UrlConnection.setChuckedStreamingMode() 를 사용해야 한다.

소켓관련등의 작업과 파일 입출력에서는 바이트 배열을 쓰게 되면 운영체제의 다이렉트 버퍼로 일단 한번 복사가 된다.

그리고 거기서 시스템콜에 의해서 실제 해당 버퍼로 전달됨.

 

아래 예제는 내부에 캐시하지말고 들어오는 대로 바로 보내는 설정 방식이다.

/* 
 * @Program that is used to enable streaming of a HTTP request body without 
    internal buffering, when the content length is not known in advance.
 * SetChunkedStreamingMode.java 
 * Author:-RoseIndia Team
 * Date:-25-Jun-2008
 */

import java.net.*;

public class SetChunkedStreamingMode {
 public static void main(String[] args) throws Exception {
        URL url = new URL("http://192.168.10.211:8080");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //enable streaming of a HTTP request body without internal buffering

        connection.setChunkedStreamingMode(1);

        System.out.println("HTTP request body without internal buffering is set");
 }
}

블로그 이미지

김진리

,