• 基于JavaSE阶段的IO流详解


    1.IO流基本概述

         在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的:

           其中从图中可知,所有输入流类都是抽象类,是InputStream或者抽象类Reader的子类;而所有输出流都是抽象类,是OutputStream或者Writer的子类。输入输出流的定义是根据流向所决定的,我们可以是本地为一个实体物质,从外界往本地输入,按照本地的状态就是读取,反之,从本地向外写入就是输出。IO流是最基本的模拟上传服务器,以及从服务器读取信息的方式,因而,在JavaSE阶段是非常重要的一部分,字符流主要用于支持Unicode的文字内容,绝大多数在字节流中所提供的类,都可在此找到对应的类,然而,字节流不能直接操作Unicode字符,所以java提供了字符流 ,注意使用IO流要抛IOException异常

    2.字符流详解

      1.FileReader和FileWriter

      FileReader是读取一个文本文件,以一个字符为单位以ASCII码或UTF-8码的形式输入到程序中,其主要语法为:

      FileReader fr = new FileReader("//文件的路径");

      (1)char[] ch = new char[1024];//数字必须是1024的倍数

      int len;//从文件中读取字符

      while((len=fr.read(ch))!=-1){//判断文件内容是否结束,注:当int=-1是时说明无内容{
         System.out.print(ch,0,len);//输出读取的字符到控制台
       }

      (1)方法是一段字符读取

      (2)int ch;

      while((ch=fr.read())!=-1){
         System.out.print((char)ch);
       }

      (2)方法是以字符为单位读取,区别就是方法1比2高效

      fr.closed;//关闭阅读器,注:closed自带flash刷新

      同理,FileWeader是读取一个文本文件,以一个字符为单位以ASCII码或UTF-8码的形式从程序中,其主要语法为:

      FileWeader fw = new FileWeader("//文件的路径")

      fw.write(ch);//写入file中ch的内容;

      fw.write(ch,0,len);//较高效方法

      fw.flash;//刷新

      fw.closed;//关流

      FileReader和FileWriter是IO流最基本的操作方式,其余的都是根据此来进一步改善的,但是以上的语法是继承Reader和Writer来讲,故FileReader和FileWriter没有特定的语法。

      2.InputSteamReader和InputSteamWriter

      InputSteamReader和InputSteamWriter转换流,顾名思义就是把字节流转换字符流,但是以字节为单位则是字节,其也没有特定的语法,同时也继承Reader类和Writer类的所有语法。

      3.BufferedReader和BufferedWriter 

      高效流,也可以说是缓冲区流,因为两者各拥有8192字符的缓冲区,无论是读取文件,还是写入文件,字符首先先进入缓冲区,然后再用一般的文件读取或者写入(也就是FileReader和FileWriter),之所以,叫高效流,是因为,用该方法可以读取或写入以字符串为单位,同时也不用在写入文件是关注换行符了(注:一般window系统换行符为" ",linux系统为" ",mac系统为" ")其一般写法为:

      BufferedWriter bw = new BufferedWriter(new FileWeader("//文件的路径")); 

      BufferedReader br = new BufferedRriter(new FileReader("//文件的路径")); 

      String line;//以字符串为单位

      while((line= br.read()//BufferedReaderBufferedReader特定读取方法)!=null){

        bw.write(line);

        bw.newLine();//自带换行符,以及刷新

        bw.flush;//缓冲区刷新,注,若不写此方法,文件可能无法写入

      }

      br.closed;

      bw.closed;

     3.PrintWriter打印流

      其是为了定义流输出的位置,并且此流可以正常的存储中文,减少乱码输出,同时也可以将原有文件形式转换其他文件形式,如,

      PrintWriter pw = new PrintWriter(new FileWriter("//文件的路径//文件的路径//文件的路径", "utf-8"//不必要区分大小写));//转换UTF-8形式,其特定语法功能有,在(一般使用)println(),可以自动换行和自动刷新,但是在使用自动刷新时,必须先定义对象时要开起该功能,如,//文件的路径PrintWriter pw = new PrintWriter(newFileWriter("//文件的路径"), true//开启自动刷新功能);

    2.字节流详解

     1.标准输入输出流(了解)

      Java遵循IO的模型,提供了Syetem.in,System.out,System.out是一个已经预先处理过的,被包装成PrintStream的对象,但是System.in不是,它是一个未经处理的InputStream。也就是说,可以直接使用System.out和System.err打印输出到控制台,但是使用System.in直接读取数据不可以,必须先做处理。

      2.FileInputStream和FileOutputStream

      用法是根于FileWriter和FileReader,其用法基本一直,只不过在定义char[]字符数组时,得换成byte[]字节数组,每次只读一个或者一段字节。

       3.BufferedInputStream和BufferedOutputStream

       同理,用法跟BufferedWriter和BufferedReader一模一样。

      4.对象操作流

      其就是ObjectInputStream和ObjectInputStreamObjectOutputStream,就是将对象读取或者写入文件中,且注意在读取时要抛ClassNotFountException异常,写入的对象必须实现一个接口:Serializable,否则会抛出:NotSerializableException,也就是序列化异常。允许类的对象通过串形化进行传输,实现Serializable 接口,声明实现这个接口,表明该类加入对象序列化协议。

      JavaSE的IO流在这基本就介绍完了,从文章可以看出,字符流和字节流几乎没有任何区别,但是为什么要分开讲述了,是因为,字符流只能输入输出文本格式,若是要输入输出视频,图片等格式,字符流则会出现乱码,这时,就应用字节流来输入输出了。

  • 相关阅读:
    五、面向对象模型OOM(ObjectOriented Model)
    四、物理数据模型PDM(Physical Data Model )
    Asp.net WebForm中应用Jquery EasyUI Layout
    七、模型文档
    六、PowerDesigner 正向工程 和 逆向工程 说明
    JQuery 原理
    三、概念数据模型CDM(Conceptual Database Model )
    C#基础Func,Action
    Ioc容器应用浅析
    Discuz上面找到的不错的分页算法
  • 原文地址:https://www.cnblogs.com/xu-cceed3w/p/8455765.html
Copyright © 2020-2023  润新知