static long getContentLength ( SignableRequest < ? > request ) throws IOException { final InputStream content = request . getContent ( ) ; if ( ! content . markSupported ( ) ) throw new IllegalStateException ( "Bug: request input stream must have been made mark-and-resettable at this point" ) ; ReadLimitInfo info = request . getReadLimitInfo ( ) ; final int readLimit = info . getReadLimit ( ) ; long contentLength = 0 ; byte [ ] tmp = new byte [ 4096 ] ; int read ; content . mark ( readLimit ) ; while ( ( read = content . read ( tmp ) ) != - 1 ) { contentLength += read ; } try { content . reset ( ) ; } catch ( IOException ex ) { throw new ResetException ( "Failed to reset the input stream" , ex ) ; } return contentLength ; }
Read the content of the request to get the length of the stream . This method will wrap the stream by SdkBufferedInputStream if it is not mark - supported .