毕向东_Java基础视频教程第19天_IO流(15~17)

第19天-15-IO流(读取键盘录入)

InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。每次调用InputStreamReader中的一个read()方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可考虑使用BufferedReader:BufferedReader in = new BufferedReader(new InputStreamReader(System.in))

OutputStreamWriter是字符流通向字节流的桥梁,它使用指定的charset把将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。每次调用write()方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累计。可以指定此缓冲区的大小,不过默认的缓冲区对多数用途来说已经足够大。注意:传递给write()方法的字符没有缓冲。

为了获得最高效率,可考虑使用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;

/*
字符流
FileReader
FileWriter

BufferedReader
BufferedWriter

字节流
FileInputStream
FileOutputStream

BufferedInputStream
BufferedOutputStream
*/
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 == '
') continue;
            if (ch == '
') {
                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();
    }
}
原文地址:https://www.cnblogs.com/echo1937/p/6353845.html