The java.io.BufferedReader and java.io.BufferedWriter classes are the character based equivalents of the byte oriented BufferedlnputStream and BufferedOutputStream classes.
When a program reads from a BufferedReader, text is taken from buffer (a block of memory) rather than directly from the underlying input stream until the buffer is empty. At this point, a read request to the underlying character stream extracts a new block of data, which refills the buffer. When a program writes to a BufferedWriter, the text is placed in the buffer. The text is moved to the underlying output stream or other target only when the buffer files ·up or when the writer is explicitly flushed, which can make writes much faster than would otherwise.
In order to create BufferedReader, one of the following two constructors can be used.
BufferedReader(Reader in}
BufferedReader(Reader in, int bufferSize}
The first argument in is Reader object which is the underlying character input stream from which data will be read. If the buffer size is not set, the default size of 8192 characters is used. Similarly, to create BufferedWriter, one of the following two constructors are used.
BufferedWriter(Writer out)
BUfferedWriter(Writer out, int bufferSize}
The first argument out isa Writer object which is the underlying character output stream to which buffered data is written. If buffer size is not set, the default size of 8192 characters is used. The BufferedReader and BufferedWriter classes have the usual methods associated with Reader and Writer classes like read () , wri te (), close () etc. In addition, they also provide the following methods.
• String readLine () : The readLine () method of the BufferedReader class reads a single line of text and returns it as a string. The return string is null when the operation attempts to read past the end of the file (EOF).
• void newline () .: The newLine () method of the BufferedWri ter class sends the preferred end of line character (or characters) for the platform being used to run the program.
Now let us consider a program that reads a file and converts its contents to uppercase and write them to a new file.
import java.io.*;
public class BufferedReaderWriter
{
public static void main(String[] args)
{
try
{
BufferedReader br = new BufferedReader(new FileReader("java.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("java1.txt"));
int ch;
while ((ch = br.read()) != -1)
{
if (Character.isLowerCase((char) ch))
bw.write(Character.toUpperCase((char) ch));
else
bw.write((char) ch);
}
br.close();
bw.close();
}
catch(Exception e) { e.printStackTrace();}
}
}