org.apache.http.entity

## Class InputStreamEntity

- java.lang.Object
- - org.apache.http.entity.AbstractHttpEntity
  - - org.apache.http.entity.InputStreamEntity

All Implemented Interfaces:
  HttpEntity

    @NotThreadSafe
    public class InputStreamEntity
    extends AbstractHttpEntity

A streamed, non-repeatable entity that obtains its content from an `InputStream`.

Since:
  4.0

### Field Summary

### Fields inherited from class org.apache.http.entity.AbstractHttpEntity

`chunked, contentEncoding, contentType, OUTPUT_BUFFER_SIZE`

### Constructor Summary

Constructors
Constructor and Description
`InputStreamEntity(InputStream instream)` Creates an entity with an unknown length.
`InputStreamEntity(InputStream instream, ContentType contentType)` Creates an entity with a content type and unknown length.
`InputStreamEntity(InputStream instream, long length)` Creates an entity with a specified content length.
`InputStreamEntity(InputStream instream, long length, ContentType contentType)`

### Method Summary

Methods
`InputStream` `getContent()` Returns a content stream of the entity.
`long` `getContentLength()` Tells the length of the content, if known.
`boolean` `isRepeatable()` Tells if the entity is capable of producing its data more than once.
`boolean` `isStreaming()` Tells whether this entity depends on an underlying stream.
`void` `writeTo(OutputStream outstream)` Writes bytes from the `InputStream` this entity was constructed with to an `OutputStream`.

### Methods inherited from class org.apache.http.entity.AbstractHttpEntity

`consumeContent, getContentEncoding, getContentType, isChunked, setChunked, setContentEncoding, setContentEncoding, setContentType, setContentType`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### InputStreamEntity

    public InputStreamEntity(InputStream instream)

Creates an entity with an unknown length. Equivalent to `new InputStreamEntity(instream, -1)`.

Parameters:
  `instream` - input stream
Throws:
  `IllegalArgumentException` - if `instream` is `null`
Since:
  4.3

#### InputStreamEntity

    public InputStreamEntity(InputStream instream,
                     long length)

Creates an entity with a specified content length.

Parameters:
  `instream` - input stream
  `length` - of the input stream, `-1` if unknown
Throws:
  `IllegalArgumentException` - if `instream` is `null`

#### InputStreamEntity

    public InputStreamEntity(InputStream instream,
                     ContentType contentType)

Creates an entity with a content type and unknown length. Equivalent to `new InputStreamEntity(instream, -1, contentType)`.

Parameters:
  `instream` - input stream
  `contentType` - content type
Throws:
  `IllegalArgumentException` - if `instream` is `null`
Since:
  4.3

#### InputStreamEntity

    public InputStreamEntity(InputStream instream,
                     long length,
                     ContentType contentType)

Parameters:
  `instream` - input stream
  `length` - of the input stream, `-1` if unknown
  `contentType` - for specifying the `Content-Type` header, may be `null`
Throws:
  `IllegalArgumentException` - if `instream` is `null`
Since:
  4.2

### Method Detail

#### isRepeatable

    public boolean isRepeatable()

Description copied from interface: `HttpEntity`
Tells if the entity is capable of producing its data more than once. A repeatable entity's getContent() and writeTo(OutputStream) methods can be called more than once whereas a non-repeatable entity's can not.

Returns:
  true if the entity is repeatable, false otherwise.

#### getContentLength

    public long getContentLength()

Description copied from interface: `HttpEntity`
Tells the length of the content, if known.

Returns:
  the content length or `-1` if unknown

#### getContent

    public InputStream getContent()
                           throws IOException

Description copied from interface: `HttpEntity`
Returns a content stream of the entity. `Repeatable` entities are expected to create a new instance of `InputStream` for each invocation of this method and therefore can be consumed multiple times. Entities that are not `repeatable` are expected to return the same `InputStream` instance and therefore may not be consumed more than once.

IMPORTANT: Please note all entity implementations must ensure that all allocated resources are properly deallocated after the `InputStream.close()` method is invoked.

Returns:
  content stream of the entity.
Throws:
  `IOException` - if the stream could not be created
See Also:
  `HttpEntity.isRepeatable()`

#### writeTo

    public void writeTo(OutputStream outstream)
                 throws IOException

Writes bytes from the `InputStream` this entity was constructed with to an `OutputStream`. The content length determines how many bytes are written. If the length is unknown (`-1`), the stream will be completely consumed (to the end of the stream).

Parameters:
  `outstream` - the output stream to write entity content to
Throws:
  `IOException` - if an I/O error occurs

#### isStreaming

    public boolean isStreaming()

Description copied from interface: `HttpEntity`
Tells whether this entity depends on an underlying stream. Streamed entities that read data directly from the socket should return `true`. Self-contained entities should return `false`. Wrapping entities should delegate this call to the wrapped entity.

Returns:
  `true` if the entity content is streamed, `false` otherwise