一、什么是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. OpenCV配置使用版

    在VS2010环境中应用Opencv,网上找到了很多配置方法,但大多都是老版本的,很多新手面对最新版本的Opencv无从下手,就给新手童鞋写了这么一篇超级详细的配置攻略,贴上来共享.要强调一点的就是, ...

  2. WEB ICON 的探讨

    一般考虑到webicon 就是cssSprite和自定义font:本文基于下述而总结和进行分析,如有笔误有望指出,谢谢 在线教程:用字体在网页中画ICON图标 http://www.imooc.com ...

  3. 在Outlook中设置QQ邮箱

    原本以为在Outlook中设置QQ邮箱没多大难度,但我错了,估计错了腾讯的麻烦程度,故记录下来. ----- 打开Outlook 2013(Outlook 2010也差不多),若是第一次打开会提示你设 ...

  4. Qt之QNetworkInterface(查询网络接口),QHostInfo(查询主机IP)

    http://blog.csdn.net/u011012932/article/details/50775052 http://blog.csdn.net/u011012932/article/det ...

  5. android 破解九宫格

    将目录切换到D:/adb目录下,命令如下 敲入命令 adb shell 然后回车,可以见到如下结果 再敲入命令cd /data/system然后回车, 再执行 rm gesture.key 回车,搞定 ...

  6. wiki oi 1044 拦截导弹

    题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...

  7. linux内核源码阅读之facebook硬盘加速flashcache之三

    上一节讲到在刷缓存的时候会调用new_kcahed_job创建kcached_job,由此我们也可以看到cache数据块与磁盘数据的对应关系.上一篇:http://blog.csdn.net/lium ...

  8. 11427 - Expect the Expected(概率期望)

    11427 - Expect the Expected Some mathematical background. This problem asks you to compute the expec ...

  9. Cloud Foundry中warden的网络设计实现——iptable规则配置

    在Cloud Foundry v2版本号中,该平台使用warden技术来实现用户应用实例执行的资源控制与隔离. 简要的介绍下warden,就是dea_ng假设须要执行用户应用实例(本文暂不考虑ward ...

  10. puppet安装和使用

    puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描写叙述语言,可管理配置 文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称 ...