Main Content

expectedContentLength

클래스: matlab.net.http.io.ContentProvider
패키지: matlab.net.http.io

ContentProvider의 콘텐츠 길이

구문

length = expectedContentLength(provider)
length = expectedContentLength(provider,force)

설명

length = expectedContentLength(provider)는 예상 콘텐츠 길이를 바이트로 반환합니다. 이 메서드는 MATLAB®에 콘텐츠 길이를 보고하려는 서브클래스가 재정의하도록 구성되어 있습니다. RequestMessage.sendRequestMessage.complete는 이 메서드를 호출하여 반환된 값으로 RequestMessage의 Content-Length 헤더 필드를 설정합니다. 메시지에 이미 값이 있는 Content-Length 필드가 포함되어 있고 length가 비어 있지 않은 경우, 이 값은 Content-Length 필드의 값과 같아야 합니다. length가 0이면 내용이 없음을 나타내며, 이 경우 getData를 처음 호출하면 비어 있는 datastop=true가 반환됩니다.

MATLAB은 RequestMessage.sendRequestMessage.complete에서 이 메서드를 호출하고, 대리자에서 delegateTo를 통해 이 메서드를 호출합니다. MATLAB은 ContentProvider.complete 이후, 그리고 ContentProvider.start 이전에 호출합니다. 이 메서드가 complete를 호출하기 전에 호출되는 경우, 제공자가 변환을 제어하는 모든 헤더 필드를 조사하지 않고는 변환된 데이터의 길이를 확인할 수 없으므로 반환된 값이 유효하지 않을 수 있습니다.

메시지에 Content-Length 헤더 필드를 포함하지 않기로 한 경우(메시지가 청크 형식의 전송 코딩을 사용하여 전송되는 경우)에는, 이 메서드를 재정의하고 비어 있지 않은 값을 반환하는 유일한 이유는 제공자가 예상 데이터 길이를 반환하는지 이중으로 확인하기 위함입니다.

데이터의 길이가 알려진 경우(즉, 이 메서드가 숫자를 반환하거나 Content-Length 필드가 비어 있지 않은 경우), 이 제공자의 getData 메서드는 정확히 해당 길이의 바이트가 반환된 뒤에 stop=true를 반환해야 합니다. MATLAB은 length=0인 경우에도 getDatastop=true를 반환할 때까지 항상 getData를 반복적으로 호출합니다. 데이터의 길이가 알려지지 않은 경우, 이 제공자가 (multipart 대리자가 아닌) 최상위 제공자라면 MATLAB은 청크 형식의 전송 코딩을 사용하여 내용을 전송하며, 제공자는 stop=true를 설정하기 전에 비어 있는 값을 포함하여 어떤 데이터 길이도 반환할 수 있습니다.

사전에 데이터의 길이를 알지 못하거나 데이터의 길이를 계산하는 데 시간이 오래 걸린다면 []을 반환하십시오. 메시지의 길이를 알고 있는 경우라도 메시지가 청크 형식의 전송 코딩을 사용하도록 하는 것은 매우 일반적인 방법으로, 어떠한 불이익도 발생하지 않습니다. 이 제공자가 multipart 대리자라면 비어 있지 않은 반환 값은 getData가 더 많은 바이트나 더 적은 바이트를 반환하는 경우에 강제로 오류를 발생시키는 데만 사용되며, 이로 인해 해당 파트에 Content-Length 헤더 필드가 나타나지 않게 됩니다. 자세한 내용은 MultipartProvider를 참조하십시오.

length = expectedContentLength(provider,force)forcetrue인 경우, 사용자가 []을 반환하고자 하더라도 데이터 길이를 계산하는 것이 불가능하지 않은 이상 필요한 경우 계산을 수행해서라도 데이터 길이를 반환해야 합니다. 이 수를 반환하려면 시간이 오래 걸리는 계산이 필요하거나 메시지에 포함된 모든 데이터가 생성되어야 하는 경우, 이후 getData를 호출할 때 다시 계산할 필요가 없도록 데이터를 캐시해야 합니다. force 인수는 사전에 데이터 길이를 알아야 하는 서브클래스가 사용할 수 있도록 제공됩니다. MATLAB은 이 메서드를 호출할 때 이 옵션을 설정하지 않으므로, 사용자는 이 옵션을 설정할 수 있는 서브클래스로서 제공자가 사용되지 않을 것임을 알고 있는 경우에는 force 인수를 무시할 수 있습니다.

forcetrue로 설정한 결과 응답으로 []을 받는 이 메서드의 호출자는 이것을 오류로 간주해도 되고, 알 수 없는 길이를 갖는 콘텐츠와 호환되는 방식으로 동작해도 됩니다.

force를 지정했을 때 length의 계산을 위해 모든 데이터가 생성되어야 하는 경우에는 스트리밍의 장점(데이터가 생성되는 즉시 전송되는)이 사라지므로, 이 옵션은 디버그와 같은 특별한 경우나 데이터 길이가 작다고 알려진 경우에 사용하는 것이 좋습니다.

force를 사용하는 예로 다른 모든 제공자의 출력값을 선택적으로 압축하는 가상의 CompressProvider를 들 수 있지만, 이 경우에도 (짧은 메시지를 압축하면 효율이 떨어지기 때문에) 출력값이 특정 길이보다 커야 합니다. 길이를 확인하려면 CompressProviderforcetrue로 설정하여 다른 제공자의 expectedContentLength를 호출해야 합니다. 이 다른 제공자가 JSONProvider를 스트리밍하고 있다면 JSON 문자열의 길이를 확인하기 위해서는 모든 입력 데이터가 처리되어야 하므로 expectedContentLength는 일반적으로 []을 반환합니다. forcetrue로 설정된 경우, JSONProviderexpectedContentLength 메서드는 모든 데이터를 처리하고(이때 자신의 putData 메서드가 나중에 사용할 수 있도록 출력 문자열을 캐시할 수 있음), 해당 문자열의 길이를 반환합니다.

입력 인수

모두 확장

콘텐츠 제공자로, matlab.net.http.io.ContentProvider 객체로 지정됩니다.

데이터의 길이를 반환할지 여부를 표시하며, true 또는 false로 지정됩니다.

expectedContentLengthtrue인 경우, 사용자가 []을 반환하고자 하더라도 데이터 길이를 계산하는 것이 불가능하지 않은 이상 필요한 경우 계산을 수행해서라도 데이터 길이를 반환해야 합니다. 이 수를 반환하려면 시간이 오래 걸리는 계산이 필요하거나 메시지에 포함된 모든 데이터가 생성되어야 하는 경우, 이후 getData를 호출할 때 다시 계산할 필요가 없도록 데이터를 캐시해야 합니다. force 인수는 사전에 데이터 길이를 알아야 하는 서브클래스가 사용할 수 있도록 제공됩니다. MATLAB은 이 메서드를 호출할 때 이 옵션을 설정하지 않으므로, 사용자는 이 옵션을 설정할 수 있는 서브클래스로서 제공자가 사용되지 않을 것임을 알고 있는 경우에는 force 인수를 무시할 수 있습니다.

forcetrue로 설정한 결과 응답으로 []을 받는 이 메서드의 호출자는 이것을 오류로 간주해도 되고, 알 수 없는 길이를 갖는 콘텐츠와 호환되는 방식으로 동작해도 됩니다.

force를 지정했을 때 length의 계산을 위해 모든 데이터가 생성되어야 하는 경우에는 스트리밍의 장점(데이터가 생성되는 즉시 전송되는)이 사라지므로, 이 옵션은 디버그와 같은 특별한 경우나 데이터 길이가 작다고 알려진 경우에 사용하는 것이 좋습니다.

출력 인수

모두 확장

예상 콘텐츠 길이(단위: 바이트)입니다. 이 메서드를 재정의하지 않으면 expectedContentLength[]을 반환합니다. MATLAB은 다음과 같이 콘텐츠 길이를 파악합니다.

  • ContentProvider가 multipart 대리자가 아니고(MultipartProvider 참조) 메시지가 (complete 메서드에 의해 Header 속성에 추가되었거나 원본 RequestMessage에 삽입된) 비어 있지 않은 값을 갖는 Content-Length 필드를 갖는 경우, Content-Length 필드가 내용의 길이가 됩니다.

  • Content-Length 필드가 없거나 이 제공자가 multipart 대리자인 경우, 이 제공자의 getData 메서드가 stop 반환 값을 설정하면 페이로드(또는 해당 파트의 데이터)가 끝납니다. 이 경우, 콘텐츠 길이를 지정할 필요가 없습니다.

특성

Accessprotected

버전 내역

R2018a에 개발됨