码迷,mamicode.com
首页 > 其他好文 > 详细

IO流

时间:2018-07-04 01:15:47      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:引入   数据流   随机   file   idt   图片   读取数据   存储   iss   

 Java IO包体系结构图:

技术分享图片

  1.流式部分――IO的主体部分;

  2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

  3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

 主要的类如下:

     1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。

     2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

     3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

     4. Reader(文件格式操作):抽象类,基于字符的输入操作。

     5. Writer(文件格式操作):抽象类,基于字符的输出操作。

     6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

IO流类结构图:

技术分享图片

1、流的概念和作用

  流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接受端对象<Thing in Java>流

  流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作

  流的作用:为数据源和目的地建立一个输送通道。

       Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流.

2、Java IO所采用的模型  

       Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。

        例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。 

3、IO流的分类

·        根据处理数据类型的不同分为:字符流和字节流

·        根据数据流向不同分为:输入流和输出流

·        按数据来源(去向)分类:

         1、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter 
         2、byte[]:ByteArrayInputStream, ByteArrayOutputStream 
         3、Char[]: CharArrayReader,CharArrayWriter 
         4、String:StringBufferInputStream, StringReader, StringWriter 
         5、网络数据流:InputStream,OutputStream, Reader, Writer 

  字符流和字节流

  流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。因此Java中的流分为两种:

   1)  字节流:数据流中最小的数据单元是字节
   2)  字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

   字符流的由来: Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

  输入流和输出流

  根据数据的输入、输出方向的不同对而将流分为输入流和输出流。

      1) 输入流:程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道

      2) 输出流:程序向输出流写入数据。将程序中的数据输出到外界(显示器、打印机、文件、网络…)的通信通道。

  采用数据流的目的就是使得输出输入独立于设备。

  输入流( Input  Stream )不关心数据源来自何种设备(键盘,文件,网络)。
  输出流( Output Stream )不关心数据的目的是何种设备(键盘,文件,网络)。

  3)特性

  相对于程序来说,输出流是往存储介质或数据通道写入数据,而输入流是从存储介质或数据通道中读取数据,一般来说关于流的特性有下面几点:

  1、先进先出,最先写入输出流的数据最先被输入流读取到。

  2、顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile可以从文件的任意位置进行存取(输入输出)操作)

  3、只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

4、Java IO流对象

  1.输入字节流InputStream

  技术分享图片

  1) FileInputStream:从本地文件系统中获取输入字节

  2) FilterInputStream:

  

 

IO流

标签:引入   数据流   随机   file   idt   图片   读取数据   存储   iss   

原文地址:https://www.cnblogs.com/kindleheart/p/9261259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!