org.springframework.core.io

## Class InputStreamResource

- java.lang.Object
- - org.springframework.core.io.AbstractResource
  - - org.springframework.core.io.InputStreamResource

All Implemented Interfaces:
  InputStreamSource, Resource

    public class InputStreamResource
    extends AbstractResource

`Resource` implementation for a given InputStream. Should only be used if no specific Resource implementation is applicable. In particular, prefer `ByteArrayResource` or any of the file-based Resource implementations where possible.

In contrast to other Resource implementations, this is a descriptor for an already opened resource - therefore returning "true" from `isOpen()`. Do not use it if you need to keep the resource descriptor somewhere, or if you need to read a stream multiple times.

Since:
  28.12.2003
Author:
  Juergen Hoeller
See Also:
  `ByteArrayResource`, `ClassPathResource`, `FileSystemResource`, `UrlResource`

### Constructor Summary

Constructors
Constructor and Description
`InputStreamResource(InputStream inputStream)` Create a new InputStreamResource.
`InputStreamResource(InputStream inputStream, String description)` Create a new InputStreamResource.

### Method Summary

Methods
`boolean` `equals(Object obj)` This implementation compares the underlying InputStream.
`boolean` `exists()` This implementation always returns `true`.
`String` `getDescription()` This implementation returns the passed-in description, if any.
`InputStream` `getInputStream()` This implementation throws IllegalStateException if attempting to read the underlying stream multiple times.
`int` `hashCode()` This implementation returns the hash code of the underlying InputStream.
`boolean` `isOpen()` This implementation always returns `true`.

### Methods inherited from class org.springframework.core.io.AbstractResource

`contentLength, createRelative, getFile, getFileForLastModifiedCheck, getFilename, getURI, getURL, isReadable, lastModified, toString`

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

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### InputStreamResource

    public InputStreamResource(InputStream inputStream)

Create a new InputStreamResource.

Parameters:
  `inputStream` - the InputStream to use

#### InputStreamResource

    public InputStreamResource(InputStream inputStream,
                       String description)

Create a new InputStreamResource.

Parameters:
  `inputStream` - the InputStream to use
  `description` - where the InputStream comes from

### Method Detail

#### exists

    public boolean exists()

This implementation always returns `true`.

Specified by:
  `exists` in interface `Resource`
Overrides:
  `exists` in class `AbstractResource`

#### isOpen

    public boolean isOpen()

This implementation always returns `true`.

Specified by:
  `isOpen` in interface `Resource`
Overrides:
  `isOpen` in class `AbstractResource`

#### getInputStream

    public InputStream getInputStream()
                               throws IOException,
                                      IllegalStateException

This implementation throws IllegalStateException if attempting to read the underlying stream multiple times.

Returns:
  the input stream for the underlying resource (must not be `null`)
Throws:
  `IOException` - if the stream could not be opened
  `IllegalStateException`
See Also:
  `MimeMessageHelper.addAttachment(String, InputStreamSource)`

#### getDescription

    public String getDescription()

This implementation returns the passed-in description, if any.

See Also:
  `Object.toString()`

#### equals

    public boolean equals(Object obj)

This implementation compares the underlying InputStream.

Overrides:
  `equals` in class `AbstractResource`
See Also:
  `Resource.getDescription()`

#### hashCode

    public int hashCode()

This implementation returns the hash code of the underlying InputStream.

Overrides:
  `hashCode` in class `AbstractResource`
See Also:
  `Resource.getDescription()`