expectedContentLength
클래스: matlab.net.http.io.ContentProvider
네임스페이스: matlab.net.http.io
ContentProvider의 콘텐츠 길이
구문
length = expectedContentLength(provider)
length = expectedContentLength(provider,force)
설명
는 예상 콘텐츠 길이를 바이트로 반환합니다. 이 메서드는 MATLAB®에 콘텐츠 길이를 보고하려는 서브클래스가 재정의하도록 구성되어 있습니다. length
= expectedContentLength(provider
)RequestMessage.send
와 RequestMessage.complete
는 이 메서드를 호출하여 반환된 값으로 RequestMessage
의 Content-Length 헤더 필드를 설정합니다. 메시지에 이미 값이 있는 Content-Length 필드가 포함되어 있고 length
가 비어 있지 않은 경우, 이 값은 Content-Length 필드의 값과 같아야 합니다. length
가 0이면 내용이 없음을 나타내며, 이 경우 getData
를 처음 호출하면 비어 있는 data
와 stop=true
가 반환됩니다.
MATLAB은 RequestMessage.send
와 RequestMessage.complete
에서 이 메서드를 호출하고, 대리자에서 delegateTo
를 통해 이 메서드를 호출합니다. MATLAB은 ContentProvider.complete
이후, 그리고 ContentProvider.start
이전에 호출합니다. 이 메서드가 complete
를 호출하기 전에 호출되는 경우, 제공자가 변환을 제어하는 모든 헤더 필드를 조사하지 않고는 변환된 데이터의 길이를 확인할 수 없으므로 반환된 값이 유효하지 않을 수 있습니다.
메시지에 Content-Length 헤더 필드를 포함하지 않기로 한 경우(메시지가 청크 형식의 전송 코딩을 사용하여 전송되는 경우)에는, 이 메서드를 재정의하고 비어 있지 않은 값을 반환하는 유일한 이유는 제공자가 예상 데이터 길이를 반환하는지 이중으로 확인하기 위함입니다.
데이터의 길이가 알려진 경우(즉, 이 메서드가 숫자를 반환하거나 Content-Length 필드가 비어 있지 않은 경우), 이 제공자의 getData
메서드는 정확히 해당 길이의 바이트가 반환된 뒤에 stop=true
를 반환해야 합니다. MATLAB은 length=0
인 경우에도 getData
가 stop=true
를 반환할 때까지 항상 getData
를 반복적으로 호출합니다. 데이터의 길이가 알려지지 않은 경우, 이 제공자가 (multipart 대리자가 아닌) 최상위 제공자라면 MATLAB은 청크 형식의 전송 코딩을 사용하여 내용을 전송하며, 제공자는 stop=true
를 설정하기 전에 비어 있는 값을 포함하여 어떤 데이터 길이도 반환할 수 있습니다.
사전에 데이터의 길이를 알지 못하거나 데이터의 길이를 계산하는 데 시간이 오래 걸린다면 []
을 반환하십시오. 메시지의 길이를 알고 있는 경우라도 메시지가 청크 형식의 전송 코딩을 사용하도록 하는 것은 매우 일반적인 방법으로, 어떠한 불이익도 발생하지 않습니다. 이 제공자가 multipart 대리자라면 비어 있지 않은 반환 값은 getData
가 더 많은 바이트나 더 적은 바이트를 반환하는 경우에 강제로 오류를 발생시키는 데만 사용되며, 이로 인해 해당 파트에 Content-Length 헤더 필드가 나타나지 않게 됩니다. 자세한 내용은 MultipartProvider
를 참조하십시오.
는 length
= expectedContentLength(provider
,force
)force
가 true
인 경우, 사용자가 []
을 반환하고자 하더라도 데이터 길이를 계산하는 것이 불가능하지 않은 이상 필요한 경우 계산을 수행해서라도 데이터 길이를 반환해야 합니다. 이 수를 반환하려면 시간이 오래 걸리는 계산이 필요하거나 메시지에 포함된 모든 데이터가 생성되어야 하는 경우, 이후 getData
를 호출할 때 다시 계산할 필요가 없도록 데이터를 캐시해야 합니다. force
인수는 사전에 데이터 길이를 알아야 하는 서브클래스가 사용할 수 있도록 제공됩니다. MATLAB은 이 메서드를 호출할 때 이 옵션을 설정하지 않으므로, 사용자는 이 옵션을 설정할 수 있는 서브클래스로서 제공자가 사용되지 않을 것임을 알고 있는 경우에는 force
인수를 무시할 수 있습니다.
force
를 true
로 설정한 결과 응답으로 []
을 받는 이 메서드의 호출자는 이것을 오류로 간주해도 되고, 알 수 없는 길이를 갖는 콘텐츠와 호환되는 방식으로 동작해도 됩니다.
force
를 지정했을 때 length
의 계산을 위해 모든 데이터가 생성되어야 하는 경우에는 스트리밍의 장점(데이터가 생성되는 즉시 전송되는)이 사라지므로, 이 옵션은 디버그와 같은 특별한 경우나 데이터 길이가 작다고 알려진 경우에 사용하는 것이 좋습니다.
force
를 사용하는 예로 다른 모든 제공자의 출력값을 선택적으로 압축하는 가상의 CompressProvider
를 들 수 있지만, 이 경우에도 (짧은 메시지를 압축하면 효율이 떨어지기 때문에) 출력값이 특정 길이보다 커야 합니다. 길이를 확인하려면 CompressProvider
가 force
를 true
로 설정하여 다른 제공자의 expectedContentLength
를 호출해야 합니다. 이 다른 제공자가 JSONProvider
를 스트리밍하고 있다면 JSON 문자열의 길이를 확인하기 위해서는 모든 입력 데이터가 처리되어야 하므로 expectedContentLength
는 일반적으로 []
을 반환합니다. force
가 true
로 설정된 경우, JSONProvider
의 expectedContentLength
메서드는 모든 데이터를 처리하고(이때 자신의 putData
메서드가 나중에 사용할 수 있도록 출력 문자열을 캐시할 수 있음), 해당 문자열의 길이를 반환합니다.
입력 인수
출력 인수
특성
Access | protected |
버전 내역
R2018a에 개발됨
참고 항목
matlab.net.http.RequestMessage
| Request | Header | getData
| complete
| MultipartProvider
| JSONProvider