一、什么是IO

Java中I/O操作主要是指使用Java进行输入,输出操作. Java全部的I/O机制都是基于数据流进行输入输出。这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。不论什么Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。

数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的还有一端看到的是一股连续不断的水流。数据写入程序能够是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说。看不到数据流在写入时的分段情况。每次能够读取当中的随意长度的数据。但仅仅能先读取前面的数据后,再读取后面的数据。

无论写入时是将数据分多次写入,还是作为一个总体一次写入。读取时的效果都是全然一样的。

“流是磁盘或其他外围设备中存储的数据的源点或终点。”在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。比方电脑上的硬盘。磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的。外存的存储量最大。其次是内存。最后是缓存,可是外存的数据的读取最慢,其次是内存,缓存最快。这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们能够简单的理解为容器。即外存是一个容器,内存又是另外一个容器。那又如何把放在外存这个容器内的数据读取到内存这个容器以及怎么把内存这个容器里的数据存到外存中呢?

在Java类库中。IO部分的内容是非常庞大的,由于它涉及的领域非常广泛:

标准输入输出,文件的操作。网络上的数据流。字符串流。对象流。zip文件流等等,java中将输入输出抽象称为流。就好像水管。将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流。将数据从内存写入外存中的称为输出流。

流是一个非常形象的概念,当程序须要读取数据的时候。就会开启一个通向数据源的流,这个数据源能够是文件。内存。或是网络连接。

类似的,当程序须要写入数据的时候,就会开启一个通向目的地的流。

二、分类:

1、按流向分类:

输入流: 程序能够从中读取数据的流。

输出流: 程序能向当中写入数据的流。

2、按传输数据单位分类:

字节流:以字节(8位二进制)为单位进行处理。主要用于读写诸如图像或声音的二进制数据。

字符流:以字符(16位二进制)为单位进行处理。

都是通过字节流的方式实现的。字符流是对字节流进行了封装,方便操作。在最底层,全部的输入输出都是字节形式的。

3、按功能分类:

节点流:从特定的地方读写的流类。如磁盘或者一块内存区域。

过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流连接创建的

三、输入/输出流

输入流

程序从输入流读取数据源。

数据源包含外界(键盘、文件、网络…)。即是将数据源读入到程序的通信通道

输出流:

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

四、字节/字符流

字节流是运行基于8位字节的输入和输出。它一次读写一字节的数据。字节流是I / O的最底层流技术,因此,假设你正在阅读或写入字符数据的最佳方法是使用字符流。其它流类型是建立在字节流之上的(如Java中的InputStream、OutputStream)。

字符流是运行基于16位字节(即两字节)的输入和输出,它一次读写一个字符(两个字节)的数据。全部的字符流类都是从Reader、Writer两个类延伸下来的。我们能够使用FileReader、FileWriter类进行读写I/O文件

五、节点/处理流

节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,比如FileInputStream和FileOutputStream,他们直接从文件里读取或往文件里写入字节流。

处理流:

“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。比如BufferedInputStream和BufferedOutputStream,使用已经存在的节点流来构造。提供带缓冲的读写,提高了读写的效率,以及DataInputStream和DataOutputStream,使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。他们都属于过滤流。

资料參考:http://www.cnblogs.com/skywang12345/p/io_01.html

八:Java之I/O的更多相关文章

  1. 分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)

    原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ======== ...

  2. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  3. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  4. Java进阶(十八)Java实现定时器(Timer)

    Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...

  5. JVM学习--(八)java堆分析

    上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...

  6. Java 学习笔记 (八) Java 变量

    head first java page85 实例变量是声明在类内而不是方法中 class Horse{ private double height=15.2; private String bree ...

  7. java基础(十八)----- java动态代理原理源码解析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...

  8. JDK1.8源码(八)——java.util.HashSet 类

    在上一篇博客,我们介绍了 Map 集合的一种典型实现 HashMap ,在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成,相对于早期版本的 JDK HashMap 实现,新增了红黑树 ...

  9. Java从零开始学三十八(JAVA IO- 重定向IO)

    一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...

随机推荐

  1. Vmware中Ubuntu挂ISO到虚拟光驱

    Ubuntu 下挂ISO到虚拟光驱的方法 https://i.cnblogs.com/EditPosts.aspx?opt=1 如果要ubuntu找到rpm软件包,需要把iso挂载到/media/cd ...

  2. linux驱动: 如何向模块传递参数, module_param和module_param_array

    如何向模块传递参数,Linux kernel 提供了一个简单的框架.    1.  module_param(name, type, perm); name 既是用户看到的参数名,又是模块内接受参数的 ...

  3. 基于Bootstrap的步骤引导html页面

    美工设计了一个下一步下一步的引导效果界面,百度谷歌了很久没有找到合适的控件,就想着能不能借助Bootstrap的标签页修改下,实现后的效果如下. 实现思路是先PS三张小图片,作为步骤之间引导的箭头,如 ...

  4. Eclipse中DTD验证导致无法进行代码提示的问题(转)

    eclipse的xml插件进行dtd验证的时候由于找不到dtd或请求主机相应超时,会出现黄色的警告 The file cannot be validated as the host "www ...

  5. 第三节 ISBN 码 / ISSN 码

    ISBN与ISSNEAN的用途很广,除了我国的商品条码CAN以及日本商品条码JAN外,目前国际认可的书籍代号与期刊号的条码,也都是由EAN变身而来的.书籍的国际认可代号称为国际标准书号(Interna ...

  6. 小小换行符乱谈(文本文件vs二进制文件)

    使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含  "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个( ...

  7. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰

    很多上班族一定熟悉如下的场景: 您早上上班一打开QQ,就弹出一个新闻集成窗口,随便点开看看吧,这一点不要紧,您就被一个又一个的链接带着逛下去了.等回过神来要工作的时候,发现已经在这些八卦新闻上浪费了一 ...

  8. 史上最详细的Android Studio系列教程一--下载和安装

    链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...

  9. iframe框架子页面与父页面间的通信

    需要注意的问题:页面最好放在服务器上测试避免跨域问题. 具体参考:http://www.cnblogs.com/ljhero/archive/2011/07/09/2101540.html

  10. 今天才知道mysql

    insert MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式.INSERT INTO tablename(列名…) V ...