Java笔记(二十六)……IO流上 字节流与字符流

时间:2022-09-11 14:36:56

概述

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

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

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

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

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

IO流常用基类

字节流的抽象基类

InputStream,OuputStream

字符流的抽象基类

Reader,Writer

注:

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

字节流

Java笔记(二十六)……IO流上 字节流与字符流

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

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

   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: }

字符流

Java笔记(二十六)……IO流上 字节流与字符流

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

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

   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体系中的所有类进行加强,加入缓冲技术,方法的接口中使用的是父类引用,利用多态提高了功能扩展性

装饰设计模式的演变过程

Java笔记(二十六)……IO流上 字节流与字符流

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流下 IO包中其他常用类以及编码表问题

    PrintWriter打印流 Writer的子类,既可以接收字符流,也可以接收字节流,还可以接收文件名或者文件对象,非常方便 同时,还可以设置自动刷新以及保持原有格式写入各种文本类型的print方法 ...

  2. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  3. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...

  4. java 笔记(4) —— java I/O 流、字节流、字符流

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  5. 【Java IO流】字节流和字符流详解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...

  6. java的IO操作:字节流与字符流操作

    流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输 ...

  7. 【java】io流之字节流转为字符流:java.io.OutputStreamWriter和java.io.InputStreamReader

    package 文件操作; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  8. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

  9. Java之IO初识(字节流和字符流)

    IO概述 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了.当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里.那么数据都是在哪些设备上的呢 ...

随机推荐

  1. extern用法总结

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用".1. extern修饰变量的声明. 如果文件a.c需要引用b.c中变量 ...

  2. 问题解决——在结构体中使用set保存结构体数据

    =====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...

  3. (转)每天一个Linux命令(5): rm

    http://www.cnblogs.com/peida/archive/2012/10/26/2740521.html 昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和 ...

  4. 基于Vuforia的Hololens图像识别

    微软官方Hololens开发文档中有关于Vuforia的内容,https://developer.microsoft.com/en-us/windows/holographic/getting_sta ...

  5. css3种方法实现元素的绝对居中

    元素的绝对居中应该是很多人熟悉的一个小应用,我记得很多年前去神州数码面试的时候就遇到过这个面试题.方法比较简单,代码如下: .node{ width : 300px; height : 400px; ...

  6. Copula函数

    Copula函数 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. Copula介绍 Copula函数把边缘分布函数与联合分布函数联系起来,是研究变 ...

  7. h5页面关于复制某段文字

    上次的项目有一段内容是点击复制按钮 然后复制一段文字,此段方法我才用的是range.selectNodeContents方法,range对象的SelectNodeContents方法将于range对象 ...

  8. 算法第四版jar包下载地址

    算法第四版jar包下载地址:https://algs4.cs.princeton.edu/code/

  9. django跨域请求问题

    一 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之 ...

  10. fastjson转换对象,属性首字母大小写的问题

    请求Json数据的时候,传递过去的String类型转Json数据的时候经常有首字母是大写的情况,例如"LoginAccount":"02:00:00:62:73:74&q ...