Class InputStreamResource
- All Implemented Interfaces:
InputStreamSource
,Resource
Resource
implementation for a given InputStream
or a given
InputStreamSource
(which can be supplied as a lambda expression)
for a lazy InputStream
on demand.
Should only be used if no other specific Resource
implementation
is applicable. In particular, prefer ByteArrayResource
or any of the
file-based Resource
implementations if possible. If you need to obtain
a custom stream multiple times, use a custom AbstractResource
subclass
with a corresponding getInputStream()
implementation.
In contrast to other Resource
implementations, this is a descriptor
for an already opened resource - therefore returning true
from
isOpen()
. Do not use an InputStreamResource
if you need to keep
the resource descriptor somewhere, or if you need to read from a stream multiple
times. This also applies when constructed with an InputStreamSource
which lazily obtains the stream but only allows for single access as well.
NOTE: This class does not provide an independent AbstractResource.contentLength()
implementation: Any such call will consume the given InputStream
!
Consider overriding #contentLength()
with a custom implementation if
possible. For any other purpose, it is not recommended to extend from this
class; this is particularly true when used with Spring's web resource rendering
which specifically skips #contentLength()
for this exact class only.
- Since:
- 28.12.2003
- Author:
- Juergen Hoeller, Sam Brannen
- See Also:
-
Constructor Summary
ConstructorDescriptionInputStreamResource
(InputStream inputStream) Create a newInputStreamResource
for an existingInputStream
.InputStreamResource
(InputStream inputStream, String description) Create a newInputStreamResource
for an existingInputStream
.InputStreamResource
(InputStreamSource inputStreamSource) Create a newInputStreamResource
with a lazyInputStream
for single use.InputStreamResource
(InputStreamSource inputStreamSource, String description) Create a newInputStreamResource
with a lazyInputStream
for single use. -
Method Summary
Modifier and TypeMethodDescriptionboolean
This implementation compares the underlying InputStream.boolean
exists()
This implementation always returnstrue
.This implementation returns a description that includes the passed-in description, if any.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 returnstrue
.Methods inherited from class org.springframework.core.io.AbstractResource
contentLength, createRelative, getFile, getFileForLastModifiedCheck, getFilename, getURI, getURL, isFile, isReadable, lastModified, readableChannel, toString
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.core.io.Resource
getContentAsByteArray, getContentAsString
-
Constructor Details
-
InputStreamResource
Create a newInputStreamResource
with a lazyInputStream
for single use.- Parameters:
inputStreamSource
- an on-demand source for a single-use InputStream- Since:
- 6.1.7
-
InputStreamResource
Create a newInputStreamResource
with a lazyInputStream
for single use.- Parameters:
inputStreamSource
- an on-demand source for a single-use InputStreamdescription
- where the InputStream comes from- Since:
- 6.1.7
-
InputStreamResource
Create a newInputStreamResource
for an existingInputStream
.Consider retrieving the InputStream on demand if possible, reducing its lifetime and reliably opening it and closing it through regular
InputStreamSource.getInputStream()
usage.- Parameters:
inputStream
- the InputStream to use- See Also:
-
InputStreamResource
Create a newInputStreamResource
for an existingInputStream
.- Parameters:
inputStream
- the InputStream to usedescription
- where the InputStream comes from- See Also:
-
-
Method Details
-
exists
public boolean exists()This implementation always returnstrue
.- Specified by:
exists
in interfaceResource
- Overrides:
exists
in classAbstractResource
-
isOpen
public boolean isOpen()This implementation always returnstrue
.- Specified by:
isOpen
in interfaceResource
- Overrides:
isOpen
in classAbstractResource
-
getInputStream
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:
FileNotFoundException
- if the underlying resource does not existIOException
- if the content stream could not be openedIllegalStateException
- See Also:
-
getDescription
This implementation returns a description that includes the passed-in description, if any.- See Also:
-
equals
This implementation compares the underlying InputStream.- Overrides:
equals
in classAbstractResource
- See Also:
-
hashCode
public int hashCode()This implementation returns the hash code of the underlying InputStream.- Overrides:
hashCode
in classAbstractResource
- See Also:
-