Package java.io

Class PipedReader

java.lang.Object
java.io.Reader
java.io.PipedReader
All Implemented Interfaces:
Closeable, AutoCloseable, Readable

public class PipedReader
extends Reader
Receives information on a communications pipe. When two threads want to pass data back and forth, one creates a piped writer and the other creates a piped reader.
See Also:
PipedWriter
  • Field Summary

    Fields inherited from class java.io.Reader

    lock
  • Constructor Summary

    Constructors
    Constructor Description
    PipedReader()
    Constructs a new unconnected PipedReader.
    PipedReader​(int pipeSize)
    Constructs a new unconnected PipedReader with the given buffer size.
    PipedReader​(PipedWriter out)
    Constructs a new PipedReader connected to the PipedWriter out.
    PipedReader​(PipedWriter out, int pipeSize)
    Constructs a new PipedReader connected to the given PipedWriter, with the given buffer size.
  • Method Summary

    Modifier and Type Method Description
    void close()
    Closes this reader.
    void connect​(PipedWriter src)
    Connects this PipedReader to a PipedWriter.
    int read()
    Reads a single character from this reader and returns it as an integer with the two higher-order bytes set to 0.
    int read​(char[] buffer, int offset, int count)
    Reads up to count characters from this reader and stores them in the character array buffer starting at offset.
    boolean ready()
    Indicates whether this reader is ready to be read without blocking.

    Methods inherited from class java.io.Reader

    mark, markSupported, read, read, reset, skip

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • PipedReader

      public PipedReader()
      Constructs a new unconnected PipedReader. The resulting reader must be connected to a PipedWriter before data may be read from it.
    • PipedReader

      public PipedReader​(PipedWriter out) throws IOException
      Constructs a new PipedReader connected to the PipedWriter out. Any data written to the writer can be read from the this reader.
      Parameters:
      out - the PipedWriter to connect to.
      Throws:
      IOException - if out is already connected.
    • PipedReader

      public PipedReader​(int pipeSize)
      Constructs a new unconnected PipedReader with the given buffer size. The resulting reader must be connected to a PipedWriter before data may be read from it.
      Parameters:
      pipeSize - the size of the buffer in chars.
      Throws:
      IllegalArgumentException - if pipeSize is less than or equal to zero.
      Since:
      1.6
    • PipedReader

      public PipedReader​(PipedWriter out, int pipeSize) throws IOException
      Constructs a new PipedReader connected to the given PipedWriter, with the given buffer size. Any data written to the writer can be read from this reader.
      Parameters:
      out - the PipedWriter to connect to.
      pipeSize - the size of the buffer in chars.
      Throws:
      IOException - if an I/O error occurs
      IllegalArgumentException - if pipeSize is less than or equal to zero.
      Since:
      1.6
  • Method Details

    • close

      public void close() throws IOException
      Closes this reader. This implementation releases the buffer used for the pipe and notifies all threads waiting to read or write.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class Reader
      Throws:
      IOException - if an error occurs while closing this reader.
    • connect

      public void connect​(PipedWriter src) throws IOException
      Connects this PipedReader to a PipedWriter. Any data written to the writer becomes readable in this reader.
      Parameters:
      src - the writer to connect to.
      Throws:
      IOException - if this reader is closed or already connected, or if src is already connected.
    • read

      public int read() throws IOException
      Reads a single character from this reader and returns it as an integer with the two higher-order bytes set to 0. Returns -1 if the end of the reader has been reached. If there is no data in the pipe, this method blocks until data is available, the end of the reader is detected or an exception is thrown.

      Separate threads should be used to read from a PipedReader and to write to the connected PipedWriter. If the same thread is used, a deadlock may occur.

      Overrides:
      read in class Reader
      Returns:
      the character read or -1 if the end of the reader has been reached.
      Throws:
      IOException - if this reader is closed or some other I/O error occurs.
    • read

      public int read​(char[] buffer, int offset, int count) throws IOException
      Reads up to count characters from this reader and stores them in the character array buffer starting at offset. If there is no data in the pipe, this method blocks until at least one byte has been read, the end of the reader is detected or an exception is thrown.

      Separate threads should be used to read from a PipedReader and to write to the connected PipedWriter. If the same thread is used, a deadlock may occur.

      Returns the number of characters read or -1 if the end of the reader has been reached.

      Specified by:
      read in class Reader
      Throws:
      IndexOutOfBoundsException - if offset < 0 || count < 0 || offset + count > buffer.length.
      InterruptedIOException - if the thread reading from this reader is interrupted.
      IOException - if this reader is closed or not connected to a writer, or if the thread writing to the connected writer is no longer alive.
    • ready

      public boolean ready() throws IOException
      Indicates whether this reader is ready to be read without blocking. Returns true if this reader will not block when read is called, false if unknown or blocking will occur. This implementation returns true if the internal buffer contains characters that can be read.
      Overrides:
      ready in class Reader
      Returns:
      always false.
      Throws:
      IOException - if this reader is closed or not connected, or if some other I/O error occurs.
      See Also:
      read(), read(char[], int, int)