转换流学习笔记
(InputStreamReader和OutputStreamWriter)
★转换流功能1:充当字节流与字符流之间的桥梁
需求:模拟英文聊天程序,要求:
(1) 从键盘录入英文字符,每录一行就把它转成大写输出到控制台;
(2) 保存聊天记录到字节流文件。
要求1的设计分析:
1)需要从键盘接收录入,得用System.in,它是字节输入流InputStream;
2)需要处理字符,可以自己把字节强转成字符,也可以用字符流;
3)需要类似readLine的功能,而这个方法在字符流BufferedReader中有(而且该类有缓冲增速)。
综上,采用转换流把字节流转成字符流处理比较合理,即使用InputStreamReader
要求2的设计分析:
1)需要把字符数据按行保存到字节流文件 ;
2)字符流采用BufferedWriter比较合适,因为它有newLine方法且能实现高效;
3)字节流文件,得采用FileOutputStream。
综上,采用转换流把字符流转成字节流处理比较合理,即使用OutputStreamWriter
流程图:
输入图:
文件保存图:
Java实现代码:
package outIn2.review;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ISRAndOSW {
public static void main(String[] args) {
try {
testInputStreamReader1();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 从键盘键盘读取数据
* 实现qq聊天
*/
public static void testInputStreamReader1() throws IOException {
// 1输入流
InputStream in = System.in;
// System.out.println(in.read());//int
/*
* 将字节流转换成字符流
*/
InputStreamReader isr = new InputStreamReader(in);
// System.out.println(isr.read());//int
BufferedReader br = new BufferedReader(isr);
//String aline = br.readLine();// 自动打包成字符,而且串联成字符串。
// System.out.println(aline.toUpperCase());
// 2输出流
FileOutputStream fout = new FileOutputStream("d:/ex/b/a1.txt");
OutputStreamWriter outW = new OutputStreamWriter(fout);
BufferedWriter bw = new BufferedWriter(outW);
// 聊天
String aline = "";
while((aline=br.readLine())!=null){
// 输出显示
System.out.println(aline);
// 保存数据
bw.write(aline);
bw.newLine();
bw.flush();
// 结束游戏
if("over".equalsIgnoreCase(aline)){
break;
}
}
}
}
注意:这个文件是在myeclipse10下建立的文件,没有装JDK的朋友们,请谨慎。