IO、字节流
字符流:
FileReader -- FileWriter
BufferedReader -- BufferedWriter
字节流:
FileInputStream -- FileOutputStream
BufferedInputStream -- BufferedOutputStream
package CoreJavaPractice; import java.io.*; public class Practice_2 { public static void main(String[] args) throws IOException { /* 需求、通过键盘录入数据,当录入一行后,就将这该数据进行打印 如果录入的是over的时候,那就停止录入。
通过一番代码操作,发现其实就是读取一行的原理。 也就是 readLine()方法
So? 能不能用readLine()方法来完成键盘录入的一行数据的读取呢?
readLine()方法是字符流BufferedReader类中的方法
而键盘录入的read方法是字节流InputStream的方法。
那么能不能将字节流转化成字符再使用字符流缓冲区的readLine()方法呢?
*/ 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); } } } }
大哥版本、 大哥版本 、 转换流。 字节-----字符流
package CoreJavaPractice; import java.io.*; public class Practice_2 { public static void main(String[] args) throws IOException { InputStream in = System.in; // 利用字节流 转换成 字符流、 InputStreamReader // 然后就可以升级成大哥版本 代码舒服 InputStreamReader inr = new InputStreamReader(in); BufferedReader bufr = new BufferedReader(inr); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) { break; } System.out.println(line.toUpperCase()); } bufr.close(); } }
转换: OutputStreamWriter ----- 是字符流通向字节流的桥梁 大大大大大哥、、、再升级版
package CoreJavaPractice; import java.io.*; public class Practice_2 { public static void main(String[] args) throws IOException { InputStream in = System.in; InputStreamReader inr = new InputStreamReader(in); BufferedReader bufr = new BufferedReader(inr); OutputStream out = System.out; OutputStreamWriter osw = new OutputStreamWriter(out); BufferedWriter bufw = new BufferedWriter(osw); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) { break; } bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } bufr.close(); } }
作者:张小龙 一个不安定的程序猿