zoukankan      html  css  js  c++  java
  • JavaIO操作(1)转换流

    3.3、转换流(了解,千万别会)

             现在对于IO操作就存在了字节流和字符流两种操作流,那么对于这两种操作流之间也是可以进行转换的,而转换的操作类有两个:

                       · 将字节输出流变为字符输出流(OutputStream è Writer):OutputStreamWriter;

                       · 将字节输入流变为字符输入流(InputStream è Reader):InputStreamReader。

             以上两个类的定义结构和构造方法如下:

    OutputStreamWriter

    InputStreamReader

    public class OutputStreamWriter extends Writer

    public class InputStreamReader extends Reader

    public OutputStreamWriter(OutputStream out)

    public InputStreamReader(InputStream in)

             通过以上的继承结构和构造方法可以清楚的发现,既然OutputStreamWriter是Wirter的子类,那么必然OutputStreamWriter可以通过Wirter类执行对象的向上转进行接收,而同时这个OutputStreamWriter类的构造方法可以接收OutputStream,这样就可以完成转换。

    范例:将字节输出流变为字符输出流

    package cn.mldn.demo;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.OutputStream;

    import java.io.OutputStreamWriter;

    import java.io.Writer;

    public class TestDemo {

        public static void main(String[] args) throws Exception {

            File file = new File("D:" + File.separator + "hellodemo"

                    + File.separator + "test.txt"); // 定义文件路径

            if (!file.getParentFile().exists()) {

                file.getParentFile().mkdirs();// 创建父目录

            }

            OutputStream output = new FileOutputStream(file) ;  // 字节输出流

            Writer out = new OutputStreamWriter(output) ;

            out.write("Hello World .") ;

            out.close() ;

        }

    }

    范例:将字节输入流变为字符输入流

    package cn.mldn.demo;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.Reader;

    public class TestDemo {

        public static void main(String[] args) throws Exception {

            File file = new File("D:" + File.separator + "hellodemo"

                    + File.separator + "test.txt"); // 定义文件路径

            if (file.exists()) {    // 文件存在则可以读取

                InputStream input = new FileInputStream(file) ;

                Reader in = new InputStreamReader(input) ;  // 将字节输入流变为字符输入流

                char data[] = new char[1024]; // 假设要读的长度是1024

                int len = in.read(data) ;   // 读取数据,返回读取个数

                input.close() ; // 关闭

                in.close() ;

                System.out.println("读取的数据是:【" + new String(data, 0, len) + "】");

            }

        }

    }

             本代码在实际工作的时候出现的几率不会超过1%设置更低。讲解这个类的目的主要是希望通过这个类来观察一下之前文件字符流和文件字节流的定义区别。

             对于文件操作可以使用FileInputStream、FileOutputStream、FileReader、FileWriter四个类,那么下面分别观察这四个类的继承结构。

    第一组:观察FileInputStream、FileOutputStream类的继承结构

    FileInputStream

    FileOutputStream

    java.lang.Object

       |- java.io.InputStream

          |- java.io.FileInputStream

    java.lang.Object

       |- java.io.OutputStream

          |- java.io.FileOutputStream

    第二组:观察FileReader、FileWriter类的继承结构

    FileReader

    FileWriter

    java.lang.Object

       |- java.io.Reader

          |- java.io.InputStreamReader

             |- java.io.FileReader

    java.lang.Object

       |- java.io.Writer

          |- java.io.OutputStreamWriter

             |- java.io.FileWriter

             通过以上的继承关系也可以发现,实际上所有的字符数据都是需要进行转换的,依靠转换流完成,以后真正保存或者是传输的数据是不可能有字符的,全部都是字节,而字符只是在电脑之中处理后的结果。

  • 相关阅读:
    值得学习:低成本创业的成功案例
    观川剧变脸绝技有感
    庸人、常人、能人和人才,你是哪一种?
    游黄浦江有感
    首出四川有感
    一个容易被人遗忘的管理技巧
    妈妈,对不起
    ora00600[kkocxj:pjpCtx]内部错误一例
    How to troubleshooting RAC Vip Problem
    TSM配置导致RMAN备份expired
  • 原文地址:https://www.cnblogs.com/guwenren/p/3050161.html
Copyright © 2011-2022 走看看