IO流的基本流情况:
字符流: 字符流缓冲区:
FileReader BufferedReader
FileWriter BufferedWriter
字节流: 字节流缓冲区:
FileInputStream BufferedInputStream
FileOutputStream BufferedOutputStream
在ReadInDemo.java中通过键盘录入一行的数据并打印其大写,发现其实就是读一行数据的原理。
也就是readLine方法。
能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?
readLine方法是字符流BufferedReader的方法
而键盘录入的read方法是字节流BufferInputStream的方法
那么能不能将字节流转换为字符流,再使用字符流缓冲区的readLine方法呢?
----------------------------------------------------------------------------------------------
(1)类InputStreamReader:是字节流通向字符流的桥梁
InputStream in = System.in
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
(2)类OutputStreamWriter:是字符流通向字节流的桥梁
OutputStream out = System.out
OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。
//例子1:
需求:通过键盘录入数据,当录入一行数据后,将就改行数据进行打印,
如果录入的数据是over,那么停止录入
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
/*
//从键盘录入数据
InputStream in = System.in; //将字节流对象转换为字符流对象,使用转换流,InputStreanReader
InputStreamReader isr = new InputStreamReader(in); //为了提高效率,将字符串进行高效技术操作,即创建字符流缓冲区流对象
BufferedReader bufr = new BufferedReader(isr);
*/ //上面三个句子简写成:键盘录入最常见写法
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); // OutputStream out = System.out;
// OutputStreamWriter osr = new OutputStreamWriter(out);
// BufferedWriter bufw = new BufferedWriter(osr); //上面三个句子简写成:
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line = bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close(); /*
String line = null;
while((line = bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toString());
}
buf.close();
*/
}
}
改变标准输入输出设备。
在System类中:
static void setIn(InputStream in)
重新分配“标准”输入流。
static void setOut(PrintStream out)
重新分配“标准”输出流。
//例子2:
import java.io.*;
class TransStreamDemo2
{
public static void main(String[] args)throws IOException
{
//System.setIn(new FileInputStream("ReadInDemo.java"));//修改读取源
//System.setOut(new PrintStream("f:\\myfile\\trans.txt"));//修改打印目的地 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//从键盘读入
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));//打印在控制台上 String line = null;
while((line = bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}