概述

IO流用来处理设备之间的数据传输

Java对数据的操作时通过流的方式

Java用于操作流的对象都在IO包中

流按操作的数据分为:字节流和字符流

流按流向不同分为:输入流和输出流

IO流常用基类

字节流的抽象基类

InputStream,OuputStream

字符流的抽象基类

Reader,Writer

注:

这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream

字节流

字节流:以字符为导向的流

简单介绍一个例子,演示字节流对图片的复制

   1: import java.io.*;
   2:  
   3: class IOCopyPicDemo 
   4: {
   5:     public static void main(String[] args) throws IOException
   6:     {
   7:         //创建字节文件读取流
   8:         FileInputStream fis = new FileInputStream("pic1.png");
   9:         //创建字节文件输入流
  10:         FileOutputStream fos = new FileOutputStream("pic2.png");
  11:  
  12:         //定义缓冲区
  13:         byte[] buf = new byte[1024];
  14:         
  15:         //读取字节到缓冲区,并写入输出流,即写入到文件
  16:         int len = -1;
  17:         while( (len = fis.read(buf)) != -1)
  18:         {
  19:             fos.write(buf,0,len);
  20:         }
  21:         
  22:         //关闭资源
  23:         fis.close();
  24:         fos.close();
  25:         
  26:     }
  27: }

字符流

字符流:以字符为导向的流

字符流只能操作文本,下面是字符流拷贝文本文件的例子

   1: import java.io.*;
   2:  
   3: class IOFileCopyDemo 
   4: {
   5:     public static void main(String[] args) throws IOException
   6:     {
   7:         //创建字符文件输入流
   8:         FileReader fr = new FileReader("IODemo1.java");
   9:         
  10:         //创建字符文件输出流
  11:         FileWriter fw = new FileWriter("IODemo2.java");
  12:         
  13:         //字符缓冲区
  14:         char[] data = new char[1024];
  15:         
  16:         int len = -1;
  17:         
  18:         //读入字符,并写入文件
  19:         while( (len = fr.read(data)) != -1)
  20:         {
  21:             fw.write(data,0,len);
  22:         }
  23:  
  24:         //关闭资源
  25:         fw.close();
  26:         fr.close();
  27:         
  28:     }
  29: }

转换流

InputStreamReader,OutputStreamWriter

InputStreamReader(InputStream in):接收字节流,转换为字符流

InputStreamReader(InputStream in, Charset cs):接收字节流,按照指定的编码表转换为字符流

其实FileReader就是使用系统默认编码表的转换流,其内部使用的也是字节流,因此,下面两句是一样的

FileReader fr = new FileReader(“1.txt”);

InputStreamReader isr = new InputStreamReader(new FileInputStream(“1.txt”),”GDK”);

缓冲区与装饰设计模式

缓冲区

顾名思义,对数据起到一个缓冲的作用,减少了流之间的耦合性,减少了每次与硬盘设备之间的通信,提供了效率

BufferedWriter,BufferedReader,BufferedInputStream,BufferedOutputStream实现了对对应流的缓冲(其实内部就是定义了一个数组,无论读一个数组或者一个字,内部都会事先读取好一个足够大的缓冲区数组,供你使用)

装饰设计模式

当我们对一个体系中的类进行功能加强时,如果对每个类都定义其子类,会使得整个体系显得非常臃肿,而且扩展性不好,没出现一个新类,就要对其创建一个用于功能增强的子类,整个时候就出现了装饰类,这个装饰类就是对一个体系的类都进行功能的加强,使用时传入体系中类的对象,同时这个装饰类又应该属于这个体系

例如:BufferedReader,对Reader体系中的所有类进行加强,加入缓冲技术,方法的接口中使用的是父类引用,利用多态提高了功能扩展性

装饰设计模式的演变过程

IO异常处理方式

IO的异常基类为IOException,是Exception的子类,代表需要被程序员处理

由于IO涉及到了各种资源,所以try处理时,必须要在finally块中进行关闭资源操作

   1: /*
   2: IO异常处理
   3: */
   4:  
   5: import java.io.*;
   6:  
   7: class IOExceptionHandleDemo 
   8: {
   9:     public static void main(String[] args) 
  10:     {
  11:         FileWriter fw = null;
  12:         FileReader fr = null;
  13:         try
  14:         {
  15:             fw = new FileWriter("IODemo1.txt");
  16:             fr = new FileReader("IODemo2.txt");
  17:             fw.write(fr.read());
  18:  
  19:         }
  20:         catch (IOException e)
  21:         {
  22:             System.out.println(e.toString());
  23:         }
  24:         finally
  25:         {
  26:             if(fw != null)
  27:             {
  28:                 try
  29:                 {
  30:                     fw.close();
  31:                 }
  32:                 catch (IOException e)
  33:                 {
  34:                     System.out.println("close exception!");
  35:                 }
  36:             }
  37:             if(fr != null)
  38:             {
  39:                 try
  40:                 {
  41:                     fr.close();
  42:                 }
  43:                 catch (IOException e)
  44:                 {
  45:                     System.out.println("close exception!");
  46:                 }
  47:             }
  48:         }
  49:     }
  50: }
 

Java IO 字节流与字符流 (三)的更多相关文章

  1. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  2. Java IO 字节流与字符流 (二)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  3. Java IO 字节流与字符流 (五)

    Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...

  4. java中字节流与字符流的区别

    字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...

  5. Java的字节流,字符流和缓冲流对比探究

    目录 一.前言 二.字节操作和字符操作 三.两种方式的效率测试 3.1 测试代码 3.2 测试结果 3.3 结果分析 四.字节顺序endian 五.综合对比 六.总结 一.前言 所谓IO,也就是Inp ...

  6. Java中字节流和字符流的比较(转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  7. java中字节流和字符流的区别

    流分类: 1.Java的字节流   InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先.2.Java的字符流  Reader是所有读取字符串输入流的祖先,而 ...

  8. Java中字节流和字符流复制文件

    字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...

  9. 14、IO (字节流、字符流)

    输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 ...

随机推荐

  1. 75-ADMI,Average Directional Movement Index,平均方向性运动指标.(2015.7.1)

    ADMI,Average Directional Movement Index 平均方向性运动指标 Directional Movement Index,平均方向性运动指标.(2015.7.1)&qu ...

  2. 集训第六周 数学概念与方法 计数 排列 L题

    Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样. 话 ...

  3. Maximun product

    Given a sequence of integers S = {S1, S2, ..., Sn}, you shoulddetermine what is the value of the max ...

  4. 关于必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用异常问题

    问题描述: 下午调试代码的时候突然发现页面突然异常了,原本以为是代码哪里写错了,后来通过定位发现MVC,UI界面的Linq异常,即关于必须添加对程序集“System.Runtime, Version= ...

  5. noip模拟赛 轮换

    分析:模拟题,关键就是要理解题目意思.m≥3的轮换可以拆成m=2的小轮换,小轮换的话只需要交换一下就可以了. #include <cstdio> #include <cstring& ...

  6. Django:(2)视图层&模板层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  7. 郁闷的出纳员(bzoj 1503)

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  8. mysql 之 Workbench的使用

    mysql 之 Workbench的使用 (1)简介 MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用My ...

  9. 洛谷 P2033 Chessboard Dance

    P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...

  10. Servlet实现页面重定向

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/page-redirect.html: 当文档移动到一个新的位置时,通常会使用页面重定向,需要将客 ...