java IO 四(转换流的使用)

扯点别的: 随着年龄的慢慢增长,有些道理才明白,有些爱才感慨。家人或许希望你能立足大城市,开创一番事业。但是在内心里家人永远希望你多花点时间陪陪他们,一起吃吃饭,说说话,只要你平平安安,生活快乐,家人就感到幸福。所以多花点时间陪陪父母、陪陪爱人、陪陪孩子。
又搁置了不短的时间,继续写java io的知识,现在感觉自己的记忆力真的不行了,总是记不住东西,哎,关键还是理解不够深入,靠死记硬背是不行的看样。开搞。参考自毕向东老师的视频

看看JDK里面的解释,强调一下自己看英文文档的重要性,不要害怕,害怕永远看不懂英文,坚持看!
InputStreamReader

Class InputStreamReader
    java.lang.Object 
        java.io.Reader 
        java.io.InputStreamReader 

InputStreamReader 是字节流转换成字符流的桥梁,使用指定的字符集读取字节并将其解码为
字符。字符集可以由名称指定或者显式给出,或者使用平台默认的字符集。

每次调用一个InputStreamReader的read()方法都会从底层字节流中读取一个或者多个字
节,为了提高字节转化为字符的效率,可以提前从底层的字节流中读取更多的字节使其超过满足当
前的读操作所需的字节数。

为了提高效率,使用BufferedReader把InputStreamReader包裹起来,例如
 BufferedReader in
   = new BufferedReader(new InputStreamReader(System.in));
构造方法

InputStreamReader(InputStream in) 
使用默认的字符集创建一个InputStreamReader实例

InputStreamReader(InputStream in, Charset cs) 
使用指定的的字符集创建一个InputStreamReader实例

InputStreamReader(InputStream in, CharsetDecoder dec) 
使用指定的字符解码创建一个InputStreamReader实例

InputStreamReader(InputStream in, String charsetName) 
使用默认的字符集名称创建一个InputStreamReader实例 

OutPutStreamWriter

OutPutStreamWriter是字符流转为字节流的桥梁,字符流通过指定的字符集将字符编码为字
节。字符集可以通过名称指定或者显式给出,或者使用平台默认的字符集。
每次调用一个writer()方法就会导致指定了字符集的编码转换器被调用,编码完的字节在写出到
底层流中之前会累计存储在一个缓冲区中。这个缓冲区的大小可以指定,一般使用默认的大小就
行。
为了高效,使用BufferedWriter()把OutPutStreamWriter包裹起来,以避免转换器的频繁调用。例如
Writer out
   = new BufferedWriter(new OutputStreamWriter(System.out));
构造函数
OutputStreamWriter(OutputStream out) 
使用默认的字符编码构造一个OutputStreamWriter 实例。

OutputStreamWriter(OutputStream out, Charset cs) 
使用指定的字符集构造一个OutputStreamWriter 实例。

OutputStreamWriter(OutputStream out, CharsetEncoder enc) 
使用指定的字符编码器构造一个OutputStreamWriter 实例。

OutputStreamWriter(OutputStream out, String charsetName) 
使用指定的字符集名称构造一个OutputStreamWriter 实例。

使用例子,从键盘录入打印到控制台;

 private static void testKeyIn() {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //构建一个BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String line;
        try {
            while ((line = br.readLine()) != null) {
                if ("over".equals(line)) {
                    break;
                }
                bw.write(line);
                bw.newLine();//换行
                bw.flush();
            }
            br.close();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

如果想把键盘录入的内容,存储到一个文本文件中,只需要更改代码中的一行代码即可。

BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));

这样,从键盘录入的内容,就会存储到out.txt文件中

如果想把一个文本文件中的内容打印到控制台上,只要改变输入流的来源即可,如下所示。

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt")));

如过想把一个文本文件中的内容复制到另外一个文本文件中,只要将源和目的指定为文件即可。如下所示,将in.txt文件中的字符复制到out.txt中

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("in.txt")));

BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));

注意,这里只是为了演示字节字符转换流的使用,如果真要把一个文本文件进行复制,完全可以使用字符流就能完成。如下所示

BufferedReader bufferedReader = new BufferedReader(new FileReader("in.txt"));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("out.txt"));

小插曲,如果想改变标准输入输出流,就是键盘和控制台,可以使用System的静态方法。

static void setIn(InputStream in) 
Reassigns the "standard" input stream. 
static void setOut(PrintStream out) 
Reassigns the "standard" output stream. 

结尾,今天知识也没学多少,又看电视,又打球,下午还有场,也是艰难。我的小腰啊,还是疼。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值