001 package com.croftsoft.core.io;
002
003 import java.io.*;
004
005 import com.croftsoft.core.lang.NullArgumentException;
006
007 /*********************************************************************
008 * A FilterReader that echoes characters read to a Writer.
009 *
010 * <p />
011 *
012 * @version
013 * 2002-09-19
014 * @since
015 * 2002-09-19
016 * @author
017 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
018 *********************************************************************/
019
020 public final class EchoReader
021 extends FilterReader
022 //////////////////////////////////////////////////////////////////////
023 //////////////////////////////////////////////////////////////////////
024 {
025
026 private final Writer echoWriter;
027
028 //////////////////////////////////////////////////////////////////////
029 //////////////////////////////////////////////////////////////////////
030
031 /*********************************************************************
032 * Main constructor.
033 *********************************************************************/
034 public EchoReader (
035 Reader in,
036 Writer echoWriter )
037 //////////////////////////////////////////////////////////////////////
038 {
039 super ( in );
040
041 NullArgumentException.check ( this.echoWriter = echoWriter );
042 }
043
044 /*********************************************************************
045 * Echoes to the standard output.
046 * <code><pre>this ( in, new PrintWriter ( System.out ) );</pre></code>
047 *********************************************************************/
048 public EchoReader ( Reader in )
049 //////////////////////////////////////////////////////////////////////
050 {
051 this ( in, new PrintWriter ( System.out ) );
052 }
053
054 //////////////////////////////////////////////////////////////////////
055 //////////////////////////////////////////////////////////////////////
056
057 public int read ( )
058 throws IOException
059 //////////////////////////////////////////////////////////////////////
060 {
061 int ch = super.read ( );
062
063 if ( ch > -1 )
064 {
065 echoWriter.write ( ch );
066 }
067
068 return ch;
069 }
070
071 public int read (
072 char [ ] cbuf,
073 int off,
074 int len )
075 throws IOException
076 //////////////////////////////////////////////////////////////////////
077 {
078 int count = super.read ( cbuf, off, len );
079
080 if ( count > -1 )
081 {
082 echoWriter.write ( cbuf, off, count );
083 }
084
085 return count;
086 }
087
088 public int read ( char [ ] cbuf )
089 throws IOException
090 //////////////////////////////////////////////////////////////////////
091 {
092 int count = super.read ( cbuf );
093
094 if ( count > -1 )
095 {
096 echoWriter.write ( cbuf, 0, count );
097 }
098
099 return count;
100 }
101
102 /*********************************************************************
103 * Flushes the echoWriter in addition to closing the input.
104 *********************************************************************/
105 public void close ( )
106 throws IOException
107 //////////////////////////////////////////////////////////////////////
108 {
109 super.close ( );
110
111 echoWriter.flush ( );
112 }
113
114 //////////////////////////////////////////////////////////////////////
115 //////////////////////////////////////////////////////////////////////
116 }