zoukankan      html  css  js  c++  java
  • JAVA-IO操作,字节-字符转换流

    掌握OutputStreamWriter和InputStreamReader类的作用

    一般操作输入输出内容的时候,就需要使用字节或字符流,但是,有些时候,需要将字符流变成字节流形式,或者字节流变成字符流形式。

    所以,就需要另一种转换流的操作类。

    OutputStreamWriter:是Writer的子类。将输出的字符流变成字节流:即将字符流的输入对象变成字节流输入对象。

    InputStreamReader:是Reader的子类。将输入的字节流变成字符流,即将一个字节流的输入对象变成字符流输入对象。

    OutputStreamWriter类的构造方法

    OutputStreamWriter(OutputStream out) 
              创建使用默认字符编码的 OutputStreamWriter。

    从构造方法可以看出,在outputStreamWriter类中需要一个字节流对象。

    例如:将字节的文件输出流,以字符的形式输出。

    package 类集;
    import java.io.* ;
    public class OutputStreamWriterDemo01{
        public static void main(String args[]) throws Exception    {    // 所有异常抛出
            File f = new File("d:" + File.separator + "test.txt") ;    
            Writer out = null ;    // 字符输出流
            out = new OutputStreamWriter(new FileOutputStream(f)) ;    // 字节流变为字符流,同时向上转型。
            out.write("hello world!!") ;    // 使用字符流输出
            out.close() ;
        }
    };

    读的时候,也可以使用字符流的形式读取字节流文件。

    package 类集;
    import java.io.* ;
    public class InputStreamReaderDemo01{
        public static void main(String args[]) throws Exception{
            File f = new File("d:" + File.separator + "test.txt") ;    
            Reader reader = null ;
            reader = new InputStreamReader(new FileInputStream(f)) ;    // 将字节流变为字符流
            char c[] = new char[1024] ;
            int len = reader.read(c) ;    // 读取
            reader.close() ;    // 关闭
            System.out.println(new String(c,0,len)) ;
        }
    };

    输出结果:

    hello world!!

    但是,以上只是文件操作为例,因为outputStreamWriter中接收的类型是OutputStream,只要是字节输出流都可以使用字符的形式操作。

    而InputStreamReader中接收的类型是InputStream。只要是字节输入流,都可以使用字符的输入流操作

    FileWriter和FileReader类的说明

    java.io 
    类 FileWriter
    java.lang.Object
      继承者 java.io.Writer
          继承者 java.io.OutputStreamWriter
              继承者 java.io.FileWriter

    FilWriter不是Writer的子类,而是转换流的子类。

    java.io 
    类 FileReader
    java.lang.Object
      继承者 java.io.Reader
          继承者 java.io.InputStreamReader
              继承者 java.io.FileReader

    FileReader也不是Reader的子类,而是转换流的子类。

    也就是说,不管如何,虽然是以字符的输出流形式,操作字节流输出流,但是实际上还是以字节的形式输出。

    而字符的输入流虽然是以字符的形式操作,但是还是使用了字节流,也就是说,在传输或者从文件读取数据的时候,文件里真正保存的数据永远是字节。 

    总结

    1,一定要掌握两个转换类的作用

    2,一定要明白的终端点实际上是以字节的形式进行的。

    3,FileWriter和FileReader两个子类的定义,中间使用了转换类。

     

  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/alsf/p/6778055.html
Copyright © 2011-2022 走看看