Top Description Fields Constructors Methods
java.io

public Class PipedInputStream

extends InputStream
Class Inheritance
Imports
java.util.Objects

A piped input stream should be connected to a piped output stream; the piped input stream then provides whatever data bytes are written to the piped output stream. Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread. The piped input stream contains a buffer, decoupling read operations from write operations, within limits. A pipe is said to be broken if a thread that was providing data bytes to the connected piped output stream is no longer alive.
Author
James Gosling
Since
1.0
See Also
java.io.PipedOutputStream

Field Summary

Modifier and TypeField and Description
protected byte[]
buffer

The circular buffer into which incoming data is placed.

pack-priv volatile boolean
pack-priv boolean
pack-priv boolean
private static final int
protected int
in

The index of the position in the circular buffer at which the next byte of data will be stored when received from the connected piped output stream.

protected int
out

The index of the position in the circular buffer at which the next byte of data will be read by this piped input stream.

protected static final int
PIPE_SIZE

The default size of the pipe's circular input buffer.

pack-priv Thread
pack-priv Thread

Constructor Summary

AccessConstructor and Description
public
PipedInputStream(PipedOutputStream
the stream to connect to.
src
)

Creates a PipedInputStream so that it is connected to the piped output stream src.

public
PipedInputStream(PipedOutputStream
the stream to connect to.
src
,
int
the size of the pipe's buffer.
pipeSize
)

Creates a PipedInputStream so that it is connected to the piped output stream src and uses the specified pipe size for the pipe's buffer.

public
PipedInputStream()

Creates a PipedInputStream so that it is not yet connected.

public
PipedInputStream(int
the size of the pipe's buffer.
pipeSize
)

Creates a PipedInputStream so that it is not yet connected and uses the specified pipe size for the pipe's buffer.

Method Summary

Modifier and TypeMethod and Description
public synchronized int

Returns:

the number of bytes that can be read from this input stream without blocking, or 0 if this input stream has been closed by invoking its close() method, or if the pipe is unconnected, or broken.
available
()

Overrides java.io.InputStream.available.

Returns the number of bytes that can be read from this input stream without blocking.

private void
private void
public void
close()

Overrides java.io.InputStream.close.

Implements java.io.Closeable.close.

Closes this input stream and releases any system resources associated with the stream.

public void
connect(PipedOutputStream
The piped output stream to connect to.
src
)

Causes this piped input stream to be connected to the piped output stream src.

private void
initPipe(int pipeSize)

public synchronized int

Returns:

the next byte of data, or -1 if the end of the stream is reached.
read
()

Implements abstract java.io.InputStream.read.

Reads the next byte of data from this piped input stream.

public synchronized int

Returns:

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
read
(byte[]
the buffer into which the data is read.
b
,
int
the start offset in array b at which the data is written.
off
,
int
the maximum number of bytes to read.
len
)

Overrides java.io.InputStream.read.

Reads up to len bytes of data from this piped input stream into an array of bytes.

protected synchronized void
receive(int
the byte being received
b
)

Receives a byte of data.

pack-priv synchronized void
receive(byte[]
the buffer into which the data is received
b
,
int
the start offset of the data
off
,
int
the maximum number of bytes received
len
)

Receives data into an array of bytes.

pack-priv synchronized void
receivedLast()

Notifies all waiting threads that the last byte of data has been received.

Inherited from java.io.InputStream:
markmarkSupportednullInputStreamreadreadAllBytesreadNBytesreadNBytesresetskipskipNBytestransferTo

Field Detail

bufferback to summary
protected byte[] buffer

The circular buffer into which incoming data is placed.

Since
1.1
closedByReaderback to summary
pack-priv volatile boolean closedByReader
closedByWriterback to summary
pack-priv boolean closedByWriter
connectedback to summary
pack-priv boolean connected
DEFAULT_PIPE_SIZEback to summary
private static final int DEFAULT_PIPE_SIZE
inback to summary
protected int in

The index of the position in the circular buffer at which the next byte of data will be stored when received from the connected piped output stream. in < 0 implies the buffer is empty, in == out implies the buffer is full

Since
1.1
outback to summary
protected int out

The index of the position in the circular buffer at which the next byte of data will be read by this piped input stream.

Since
1.1
PIPE_SIZEback to summary
protected static final int PIPE_SIZE

The default size of the pipe's circular input buffer.

Since
1.1
readSideback to summary
pack-priv Thread readSide
writeSideback to summary
pack-priv Thread writeSide

Constructor Detail

PipedInputStreamback to summary
public PipedInputStream(PipedOutputStream src) throws IOException

Creates a PipedInputStream so that it is connected to the piped output stream src. Data bytes written to src will then be available as input from this stream.

Parameters
src:PipedOutputStream

the stream to connect to.

Exceptions
IOException:
if an I/O error occurs.
PipedInputStreamback to summary
public PipedInputStream(PipedOutputStream src, int pipeSize) throws IOException

Creates a PipedInputStream so that it is connected to the piped output stream src and uses the specified pipe size for the pipe's buffer. Data bytes written to src will then be available as input from this stream.

Parameters
src:PipedOutputStream

the stream to connect to.

pipeSize:int

the size of the pipe's buffer.

Exceptions
IOException:
if an I/O error occurs.
IllegalArgumentException:
if pipeSize <= 0.
Since
1.6
PipedInputStreamback to summary
public PipedInputStream()

Creates a PipedInputStream so that it is not yet connected. It must be connected to a PipedOutputStream before being used.

PipedInputStreamback to summary
public PipedInputStream(int pipeSize)

Creates a PipedInputStream so that it is not yet connected and uses the specified pipe size for the pipe's buffer. It must be connected to a PipedOutputStream before being used.

Parameters
pipeSize:int

the size of the pipe's buffer.

Exceptions
IllegalArgumentException:
if pipeSize <= 0.
Since
1.6

Method Detail

availableback to summary
public synchronized int available() throws IOException

Overrides java.io.InputStream.available.

Returns the number of bytes that can be read from this input stream without blocking.

Returns:int

the number of bytes that can be read from this input stream without blocking, or 0 if this input stream has been closed by invoking its close() method, or if the pipe is unconnected, or broken.

Annotations
@Override
Exceptions
IOException:
if an I/O error occurs.
Since
1.0.2
awaitSpaceback to summary
private void awaitSpace() throws IOException
checkStateForReceiveback to summary
private void checkStateForReceive() throws IOException
closeback to summary
public void close() throws IOException

Overrides java.io.InputStream.close.

Implements java.io.Closeable.close.

Doc from java.io.InputStream.close.

Closes this input stream and releases any system resources associated with the stream.

Annotations
@Override
Exceptions
IOException:
if an I/O error occurs.
connectback to summary
public void connect(PipedOutputStream src) throws IOException

Causes this piped input stream to be connected to the piped output stream src. If this object is already connected to some other piped output stream, an IOException is thrown.

If src is an unconnected piped output stream and snk is an unconnected piped input stream, they may be connected by either the call:

snk.connect(src)
snk.connect(src)

or the call:

src.connect(snk)
src.connect(snk)

The two calls have the same effect.

Parameters
src:PipedOutputStream

The piped output stream to connect to.

Exceptions
IOException:
if an I/O error occurs.
initPipeback to summary
private void initPipe(int pipeSize)
readback to summary
public synchronized int read() throws IOException

Implements abstract java.io.InputStream.read.

Reads the next byte of data from this piped input stream. The value byte is returned as an int in the range 0 to 255. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

Returns:int

Doc from java.io.InputStream.read.

the next byte of data, or -1 if the end of the stream is reached.

Annotations
@Override
Exceptions
IOException:
if the pipe is unconnected, broken, closed, or if an I/O error occurs.
readback to summary
public synchronized int read(byte[] b, int off, int len) throws IOException

Overrides java.io.InputStream.read.

Reads up to len bytes of data from this piped input stream into an array of bytes. Less than len bytes will be read if the end of the data stream is reached or if len exceeds the pipe's buffer size. If len is zero, then no bytes are read and 0 is returned; otherwise, the method blocks until at least 1 byte of input is available, end of the stream has been detected, or an exception is thrown.

Parameters
b:byte[]

Doc from java.io.InputStream.read.

the buffer into which the data is read.

off:int

Doc from java.io.InputStream.read.

the start offset in array b at which the data is written.

len:int

Doc from java.io.InputStream.read.

the maximum number of bytes to read.

Returns:int

Doc from java.io.InputStream.read.

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

Annotations
@Override
Exceptions
IOException:
if the pipe is broken, unconnected, closed, or if an I/O error occurs.
NullPointerException:
If b is null.
IndexOutOfBoundsException:
If off is negative, len is negative, or len is greater than b.length - off
receiveback to summary
protected synchronized void receive(int b) throws IOException

Receives a byte of data. This method will block if no input is available.

Parameters
b:int

the byte being received

Exceptions
IOException:
If the pipe is broken, unconnected, closed, or if an I/O error occurs.
Since
1.1
receiveback to summary
pack-priv synchronized void receive(byte[] b, int off, int len) throws IOException

Receives data into an array of bytes. This method will block until some input is available.

Parameters
b:byte[]

the buffer into which the data is received

off:int

the start offset of the data

len:int

the maximum number of bytes received

Exceptions
IOException:
If the pipe is broken, unconnected, closed, or if an I/O error occurs.
receivedLastback to summary
pack-priv synchronized void receivedLast()

Notifies all waiting threads that the last byte of data has been received.