字符流
Reader Writer
字符流缓冲区
BufferedReader BufferedWriter
字节流
InputStream OutputStream
字节流缓冲区
BufferedInputStream BufferedOutputStream
转换流
InputStreamReader OutputStreamWriter
案例:键盘录入输出
读取键盘录入
System.out:对应的是标准输出设备:控制台。
System.in:对应的是标准输入设备:键盘。
需求:
通过键盘录入数据。
当录入一行字母数据后,就将该行数据大写形式进行打印。如果录入的数据是over,那么停止录入。
import java.io.*;
class ReadIn{
public static void main(String[] args)throws IOException{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true){
int ch=in.read();
if(ch=='\r')
continue;
if(ch=='\n'){
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}else
sb.append((char)ch);
}
in.close();
}
}
转换流:优化简写键盘录入输出
通过上述键盘录入一行数据并打印其大写案例,发现其实就是读一行数据的原理。也就是readLine()方法。
怎么直接使用readLine()方法来完成键盘录入一行数据的读取:
readLine():字符流BufferedReader类中的方法。
键盘录入的read()方法是字节流InputStream类中的方法。
解决方法:使用转换类将字节流转成字符流,再使用字符流相关方法。因此要使用以下转换流:
InputStreamReader OutputStreamWriter
import java.io.*;
class TransStreamDemo{
public static void main(String[] args)throws IOException{
/*// 获取键盘录入对象
InputStream in=System.in;
// 将字节流对象转成字符流对象,使用转换流:InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
// 为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader
BufferedReader bufr=new BufferedReader(isr);*/
// 键盘录入最常见、最简洁写法
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
/*// 键盘输出
OutputStream out=System.out;
OutputStreamWriter osw=new OutputStreamWriter(out);
BufferedWriter bufw=new BufferedWriter(osw);*/
// 键盘输出最常见、最简洁写法
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();
bufw.close();
}
}