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两个子类的定义,中间使用了转换类。

     

  • 相关阅读:
    用java抓取网页信息!
    WPF之Binding对数据的转换(第五天)
    WPF读书笔记 x名称空间详解(第二天)
    WPF的UI布局(Layout)WPF读书笔记(第三天)
    WPF 数据绑定Bingding基础(第四天)
    WPF读书笔记(第一天)
    HelloWin程序(窗口与消息)
    django创建数据库表方法
    OpenSSH利用处理畸形长度密码造成的时间差,枚举系统用户(CVE20166210)
    ldap匿名访问测试脚本
  • 原文地址:https://www.cnblogs.com/alsf/p/6778055.html
Copyright © 2011-2022 走看看