一、流的分类

1.按照方向分为:

(1)输入流:从数据源读取数据到程序中。只能从中读取数据,不能向其中写入数据。IO包中的输入流都继承自抽象类InputStream或Reader。

(2)输出流:经数据从程序写入数据目的地。只能从中写入数据,而不能从中读取数据,IO包中的输出流都继承自抽象类OutputStream和Writer。

在I/O 库中的每个输入流都可以找到对应的输出流。

2.按照处理数据的最小单位不同分为:

(1)字节流:字节流是一byte为最小单位进行数据传送,io包中的字节流都继承自抽象类InputStream或OutputStream.

(2)字符流:字符流是以char为最小单位进行数据传送。io包中的字符流都是继承自抽象类Reader或者Writer。

  I/O库做出这种区分是为了满足处理文字性数据的需要。byte是8位的,char是16位的。在JAVA中,各种语言文字都是以Unicode形式编码,Unicode编码是基于16位的char,所以在读写文字性的数据时通过字符流会更有效率、更方便。而一些二进制数据的读写,比如图像、声音等,则仍必须通过字节流来完成。

  字节流的类名以InputStream或OutputStream结尾,字符流的类名以Reader或Writer结尾。字节流对应的内存变量类型是byte[],字符流对应的内存变量类型是char[]。

3.按照流的功能分为:

(1)节点流:节点流是可以直接从或者向一个特定的数据源读写数据的流。也成为低级流。

从InputStream或Reader派生的类都有一个基本的read()方法,用于读取单一的字节或者字节数组;对所有从OutputStream或Writer派生的类都有一个基本的write()方法,用于写入单一的字节或者整个字节数组。

(2)处理流:处理流不直接连接到设备,而是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能,也成为高级流。

区分高级流和低级流:查看该类的构造器,如果类的构造器带有一个已存在的流作为参数,那么就是高级流,否则就是低级流。

I/O操作步骤:

(1)建立流:根据数据源和具体操作选择流,然后建立流。创建内存到数据源之间的数据通道,以传输数据。

(2)操作流:将数据读取到内存,或将内存中的数据写入数据源。

(3)关闭流:流操作结束后,释放所有与该流相关联的系统资源。

二、文件类

  java.io包中的File类提供了管理磁盘文件和目录的基本功能。我们可以将一个File对象看成是代表一个文件或目录的名称和位置的字符串。File类有四个构造方法:

public File(String pathname):创建一个与指定路径名关联的File对象。

public File(String parent,String child):使用指定参数创建一个File对象。参数parent代表一个目录,参数child代表在parent中的子目录或文件。

public File (File parent,String child):与上一个相同,除了目录是用一个File对象而不是一个字符串来表示。

public File(URI uri):使用给定的java.net.URI对象创建一个File对象。URI是统一资源标识符,一个文件的URI是“File:///目录/文件名”格式。

因为File对象类似于一个字符串,只代表了一个文件或者目录的路径名,所以即使指定的文件或目录不存在,这些构造器也能成功执行。

三、字节流

  字节流用于处理二进制文件。所有字节流都继承于抽象类InputStream和OutputStream两个父类。其中InputStream为读取字节流的父类,OutputStream为写入字节流的父类

1.低级字节流

根据输入和输出设备或数据源分为三类:

(1)对二进制文件进行读写操作的FileInputStream和FileOutputStream类,其数据源是磁盘文件。

(2)对内存缓冲区的字节数组进行读写操作的ByteArrayInputStream和ByteArrayOutputStream类,其数据源是内存中的字节数组。

(3)对线程管道进行读写操作的PipedInputStream和PipedOutputStream类,其数据源是线程管道。

2.高级字节流

  高级字节流对低级字节流进行了封装,并有许多功能的扩展。

(1)字节缓冲流

BufferedInputStream和BufferedOutputStream可以为InputStream和OutputStream类的对象增加缓冲区功能。BufferedInputStream的数据成员b是一个字节数组默认为2048个字节。当读取数据源时,BufferedInputStream会尽量b填满。当使用read()方法时,实际上是先读取数据成员b的数据而不是直接读取数据源。当b中的数据不足时,才会再实现给定的InputStream对象的read()方法,从指定的设备中提取数据。

BufferedOutStream的数据成员是一个字节数组,默认为512字节。当使用write()方法,会先将数据写至数据成员b中,当b已满时才会实现给定的OutputStream对象的write()方法,将b数据写至目的地,而不是每次都对目的地作写入的动作。

四、字符流

  字符流用于处理文本文件。所有字符流都继承于抽象类Reader和Writer两个父类。其中Reader为读取字符流的父类,Writer为写入字符流的父类。

Reader与InputStream相似,用于从流中读取数据,Reader是以字符为单位读取数据。

Writer和OutputStream相似,用于从流中写入数据,Writer是以字符为单位写入数据。

JAVA I/O系统的更多相关文章

  1. java中获取系统属性以及环境变量

    java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户 ...

  2. 彻底明白Java的IO系统

    java学习:彻底明白Java的IO系统 文章来源:互联网 一. Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有 ...

  3. Java的IO系统

     Java IO系统     "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务."     由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的.其中最大的 ...

  4. JAVA开源B2C系统

    前言 最近有人想面向境外销售商品,但是又不想依托于亚马逊这些平台,于是找我来帮忙想弄个B2C系统.因为刚开始只是打算试试水,也就不打算投入多少成本了.所以这边就考虑使用开源的B2C系统来直接使用了. ...

  5. java.io.FileNotFoundException(系统找不到指定的路径。)

    报错:java.io.FileNotFoundException(系统找不到指定的路径.) 解决方法: 1.检查文件路径是否正确 2.另外,使用OutputStream时,如果文件不存在,会自动创建文 ...

  6. Java 如何获取系统时间

    Java 如何获取系统时间 import java.text.SimpleDateFormat; import java.util.Date; public class Test { public s ...

  7. Java如何实现系统监控、系统信息收集(转

    Java如何实现系统监控.系统信息收集.sigar开源API的学习 系统监控(1) Jar资源下载:http://download.csdn.net/detail/yixiaoping/4903853 ...

  8. Java I/O系统学习系列一:File和RandomAccessFile

    I/O系统即输入/输出系统,对于一门程序语言来说,创建一个好的输入/输出系统并非易事.因为不仅存在各种I/O源端和想要与之通信的接收端(文件.控制台.网络链接等),而且还需要支持多种不同方式的通信(顺 ...

  9. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  10. Java I/O系统学习系列三:I/O流的典型使用方式

    尽管可以通过不同的方式组合IO流类,但我们可能也就只用到其中的几种组合.下面的例子可以作为典型的IO用法的基本参考.在这些示例中,异常处理都被简化为将异常传递给控制台,但是这只有在小型示例和工具中才适 ...

随机推荐

  1. WPF PRISM开发入门一( 初始化PRISM WPF程序)

    这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码.这个系列的博客将选择PRISM 4. ...

  2. [Linux] 获得系统位数

    三种方法获得系统多少位: 以下三个例子都得到的是64位的系统 1. getconf LONG_BIT 2. echo $HOSTTYPE 3. uname –a

  3. 用rlwrap使sqlplus可以上下翻页

    下载rlwrap-0.30 从光盘上安装readline-devel和readline 安装rlwrap: #tar -zxvf rlwrap-0.30.tar.gz#cd rlwrap-0.30#. ...

  4. 为什么要使用 Node.js

    这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部 ...

  5. oracle本机登录不上dba的权限不足错误

    说明:因遇到“sqlplus / as sysdba”登录oracle时遇到权限不足(ora-01031)错误:百度到以下资料,原文链接: http://www.xifenfei.com/2011/1 ...

  6. Sql Server 常用系统存储过程大全

    -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...

  7. python 定义类方法

    定义类方法 和属性类似,方法也分实例方法和类方法. 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身. 要在class中定义类方法,需要这么写: class Person( ...

  8. Bootstrap Table 表格参数详解

    表格参数 名称   标签   类型   默认   描述   - data-toggle String 'table' 不用写 JavaScript 直接启用表格. classes data-class ...

  9. PHP入门 - - 06-->HTML的表格标签

    表格标签<table> <table>的属性: Align: left, center, right          (表格的)位置 Border:              ...

  10. text()、html() 以及 val()的区别

    text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值 下面的例子演示如何通过 text().htm ...