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系统换行符为"\r\n",linux系统为"\r",mac系统为"\n")其一般写法为:

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

基于JavaSE阶段的IO流详解的更多相关文章

  1. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  2. IO流详解

    目录 IO流 IO流概述及其分类 IO概念 流按流向分为两种: 流按操作类型分为两种: 常用的IO流类 字节流的抽象父类: 字符流的抽象父类: InputStream & FileInputS ...

  3. Java IO流详解(一)——简单介绍

    文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...

  4. IO流详解(半教材类型)

    这两天学习了IO流,整理了一些理论知识点,仅供参考. java流概述 一 流 从操作系统层面和文件系统,数据保存相关的是所有语言都具备的一个基本功能,java专门开发了一个包:java.io.*;ja ...

  5. Java之IO流详解

    IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中  ←→ 把数据写入硬盘(磁带)  内存中的数据不可持久保存的  输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...

  6. java之IO流详解(一)

    IO流的分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流  InputStream 字节输出流  OutputStream 字符流 字符输入流  Reader 字 ...

  7. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

  8. 《Java基础知识》Java IO流详解

    Java IO概念 1. 用于设备之间的数据传输. 2. Java 将操作数据流的功能封装到了IO包中. 3. 数据流流向分:输入流和输出流,操作对象为文件. 4. 流按照操作数据分:字节流(通用)和 ...

  9. IO流详解及测试代码

    IO流 (1)IO用于在设备间进行数据传输的操作 (2)分类:    A:流向       输入流 读取数据      输出流 写出数据   B:数据类型     字节流         字节输入流  ...

随机推荐

  1. Python基础知识-05-数据类型总结字典

    python其他知识目录 1.一道题,选择商品的序号.程序员和用户各自面对的序号起始值 如有变量 googs = ['汽车','飞机','火箭'] 提示用户可供选择的商品: 0,汽车1,飞机2,火箭用 ...

  2. 欢迎来怼—第三次Scrum会议

    一.会议成员 队名:欢迎来怼队长:田继平队员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片: 二.会议时间 2017年10月15日    17:15-17:41   总用时26min 三.会议地点 ...

  3. struts2 不返回result的做法

    有时候 比如提交一个弹框的表单 提交成功后我们只是让表单关闭并不进行页面跳转,那么action 里面就returne null, 然后result 也不用配置了 版权声明:本文为博主原创文章,未经博主 ...

  4. DS01--抽象数据类型

    一.作业内容 二.数据结构.函数说明 1.头文件 common.h 2.数据结构 Rational.h 三.代码实现说明 1.构造有理数T 2.销毁有理数T 3.e返回有理数的分子或分母 4.用e改变 ...

  5. (三)MySQL终极篇

    1.索引 详细介绍:http://www.cnblogs.com/57rongjielong/p/8039452.html 索引是对数据库表中一个或多个列的值进行排序的结构.索引是经过某种算法优化过的 ...

  6. "Scrum站立会议"浅析

    目录 Scrum Scrum Meeting功能及要点 Scrum Meeting点评 Scrum 定义:是一种软件开发流程.它并不是一项技术,这种开发方式的主要驱动核心是人,它采用的是迭代式开发. ...

  7. oracle 查询优化及sql改写

    ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作.假设高速 ...

  8. 对Spark2.2.0文档的学习1-Cluster Mode Overview

    Cluster Mode Overview Link:http://spark.apache.org/docs/2.2.0/cluster-overview.html Spark应用(Applicat ...

  9. bzoj3517 翻硬币

    题意 有一个n行n列的棋盘,每个格子上都有一个硬币,且n为偶数.每个硬币要么是正面朝上,要么是反面朝上.每次操作你可以选定一个格子(x,y),然后将第x行和第y列的所有硬币都翻面.求将所有硬币都变成同 ...

  10. 【bzoj3992】[SDOI2015]序列统计 原根+NTT

    题目描述 求长度为 $n$ 的序列,每个数都是 $|S|$ 中的某一个,所有数的乘积模 $m$ 等于 $x$ 的序列数目模1004535809的值. 输入 一行,四个整数,N.M.x.|S|,其中|S ...