/**
* 转换流InputStreamReader/OutputStreamWriter
*/
public class ConvertStream1 {
public static void main(String[] args) {
try (
InputStream in = System.in;
//System.in是InputStream对象,用于读取键盘输入/数据源的字节,是字节流、节点流,每次.read()只能读取一个字节,当用Scanner(System.in)的nextLine()方法时会将字节流转换为字符流,再通过BufferedReader读取整行内容
OutputStream out = System.out;
//System.out是PrintStream对象,PrintStream继承FilterOutputStream继承OutputStream,用于显示接收到的内容,是字节流、节点流,System.out.println()方法同样将out字节流转换为字符流,再通过BufferedWriter输出整行内容
InputStreamReader isr = new InputStreamReader(in);
//InputStreamReader处理字节流,实现字节流向字符流的转换,是处理流、字符流
OutputStreamWriter osw = new OutputStreamWriter(out);
//OutputStreamWriter将字节输出流转换为字符输出流
BufferedReader br = new BufferedReader(isr);
//将转换流传给字符缓冲流
BufferedWriter bw = new BufferedWriter(osw)
){
String inp;
do {
bw.write("请输入:");
bw.flush();
inp = br.readLine();
//.readLine()是读取一行内容,当System.in等待用户输入完成字符串后.read()只能读取一个字节的内容,通过嵌套处理流调用.readLine()将一行内容全部读取
bw.write("请确认您输入的内容是否正确:" + inp);
//使用字符处理流.write()
bw.newLine();
bw.write("确认Y/N:");
bw.flush();
//flush()在每一段输出的末尾使用,不需要每输出一次执行一遍
inp = br.readLine();
} while (!"y".equalsIgnoreCase(inp));
}catch (Exception e){
e.printStackTrace();
}
//System.out可以输出字节到控制台,当BufferedWriter写入字符串String时将字符串变为字符数组char[],后续执行flush时,调用内置的OutputStreamWriter,通过流编码器将字符数组char[]根据设定的字符集charset转化为字节数组byte[],这个过程是编码的过程
//System.out将编码后的字节数组byte[]输出到控制台,控制台再对bytes进行解码,转化为字符串/文本显示出来
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("iostream/testFile4.txt")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("iostream/testFile5.txt")))){
//字节流外面套转换流再套缓冲流
int num = 1;
for (String line = br.readLine();line!=null;line = br.readLine()){
bw.write(num+". "+line);
//字节流无法使用拼接字符串添加行号,通过嵌套后使用缓冲流的write,作用同BufferedWriter(FileWriter)的write,而FileWriter对象内部也会生成OutputStreamWriter(FileOutputStream)对象
bw.newLine();
num++;
}
bw.flush();
}catch (Exception e){
e.printStackTrace();
}
}
}
| 留言与评论(共有 0 条评论) “” |