Class DotTerminatedMessageReader

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Readable

    public final class DotTerminatedMessageReader
    extends java.io.Reader
    DotTerminatedMessageReader is a class used to read messages from a server that are terminated by a single dot followed by a <CR><LF> sequence and with double dots appearing at the begining of lines which do not signal end of message yet start with a dot. Various Internet protocols such as NNTP and POP3 produce messages of this type.

    This class handles stripping of the duplicate period at the beginning of lines starting with a period, converts NETASCII newlines to the local line separator format, truncates the end of message indicator, and ensures you cannot read past the end of the message.

    Version:
    $Id: DotTerminatedMessageReader.java 165675 2005-05-02 20:09:55Z rwinston $
    Author:
    Daniel F. Savarese
    • Field Summary

      • Fields inherited from class java.io.Reader

        lock
    • Constructor Summary

      Constructors 
      Constructor Description
      DotTerminatedMessageReader​(java.io.Reader reader)
      Creates a DotTerminatedMessageReader that wraps an existing Reader input source.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Closes the message for reading.
      int read()
      Reads and returns the next character in the message.
      int read​(char[] buffer)
      Reads the next characters from the message into an array and returns the number of characters read.
      int read​(char[] buffer, int offset, int length)
      Reads the next characters from the message into an array and returns the number of characters read.
      boolean ready()
      Determines if the message is ready to be read.
      • Methods inherited from class java.io.Reader

        mark, markSupported, nullReader, read, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

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

      • DotTerminatedMessageReader

        public DotTerminatedMessageReader​(java.io.Reader reader)
        Creates a DotTerminatedMessageReader that wraps an existing Reader input source.
        Parameters:
        reader - The Reader input source containing the message.
    • Method Detail

      • read

        public int read()
                 throws java.io.IOException
        Reads and returns the next character in the message. If the end of the message has been reached, returns -1. Note that a call to this method may result in multiple reads from the underlying input stream to decode the message properly (removing doubled dots and so on). All of this is transparent to the programmer and is only mentioned for completeness.
        Overrides:
        read in class java.io.Reader
        Returns:
        The next character in the message. Returns -1 if the end of the message has been reached.
        Throws:
        java.io.IOException - If an error occurs while reading the underlying stream.
      • read

        public int read​(char[] buffer)
                 throws java.io.IOException
        Reads the next characters from the message into an array and returns the number of characters read. Returns -1 if the end of the message has been reached.
        Overrides:
        read in class java.io.Reader
        Parameters:
        buffer - The character array in which to store the characters.
        Returns:
        The number of characters read. Returns -1 if the end of the message has been reached.
        Throws:
        java.io.IOException - If an error occurs in reading the underlying stream.
      • read

        public int read​(char[] buffer,
                        int offset,
                        int length)
                 throws java.io.IOException
        Reads the next characters from the message into an array and returns the number of characters read. Returns -1 if the end of the message has been reached. The characters are stored in the array starting from the given offset and up to the length specified.
        Specified by:
        read in class java.io.Reader
        Parameters:
        buffer - The character array in which to store the characters.
        offset - The offset into the array at which to start storing characters.
        length - The number of characters to read.
        Returns:
        The number of characters read. Returns -1 if the end of the message has been reached.
        Throws:
        java.io.IOException - If an error occurs in reading the underlying stream.
      • ready

        public boolean ready()
                      throws java.io.IOException
        Determines if the message is ready to be read.
        Overrides:
        ready in class java.io.Reader
        Returns:
        True if the message is ready to be read, false if not.
        Throws:
        java.io.IOException - If an error occurs while checking the underlying stream.
      • close

        public void close()
                   throws java.io.IOException
        Closes the message for reading. This doesn't actually close the underlying stream. The underlying stream may still be used for communicating with the server and therefore is not closed.

        If the end of the message has not yet been reached, this method will read the remainder of the message until it reaches the end, so that the underlying stream may continue to be used properly for communicating with the server. If you do not fully read a message, you MUST close it, otherwise your program will likely hang or behave improperly.

        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in class java.io.Reader
        Throws:
        java.io.IOException - If an error occurs while reading the underlying stream.