第19天-15-IO流(读取键盘录入)
InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。每次调用InputStreamReader中的一个read()方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可考虑使用BufferedReader:BufferedReader in = new BufferedReader(new InputStreamReader(System.in))
OutputStreamWriter是字符流通向字节流的桥梁,它使用指定的charset把将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
为了获得最高效率,可考虑使用BufferedWriter以避免频繁调用转换器:BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
第19天-16-IO流(读取转换流)
package bxd;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;/*字符流FileReaderFileWriterBufferedReaderBufferedWriter字节流FileInputStreamFileOutputStreamBufferedInputStreamBufferedOutputStream*/public class TransStreamDemo { public static void main(String[] args) throws IOException { method(); anotherMethod(); } //使用readLine方法来实现: readLine()是字符流BufferedReader的方法, 而System.in的read()是字节流InputStream的方法 public static void method() throws IOException { InputStream in = System.in; 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(); } //通过键盘录入数据. 当录入一行数据后, 就将该行数据进行打印; 当录入的数据是over, 那么停止录入. //System.in: 对应的是标准输入设备, 键盘; System.out: 对应的是标准输出设备, 控制台 public static void anotherMethod() 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); } }}
第19天-17-IO流(写入转换流)
package bxd;import java.io.*;public class TransStreamDemo { public static void main(String[] args) throws IOException { // 获取键盘录入对象; 使用InputStreamReader将字节流对象转化为字符流对象; 使用BufferedReader以实现高效操作. // InputStream in = System.in; // InputStreamReader inr = new InputStreamReader(in); // BufferedReader bufr = new BufferedReader(inr); BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); // OutputStream out = System.out; // OutputStreamWriter ows = new OutputStreamWriter(out); // BufferedWriter bufw = new BufferedWriter(ows); 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(); }}