八:Java之I/O
一、什么是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中的基本数据类型的功能。他们都属于过滤流。
八:Java之I/O的更多相关文章
- 分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)
原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ======== ...
- Java学习笔记二十八:Java中的接口
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java进阶(十八)Java实现定时器(Timer)
Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...
- JVM学习--(八)java堆分析
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...
- Java 学习笔记 (八) Java 变量
head first java page85 实例变量是声明在类内而不是方法中 class Horse{ private double height=15.2; private String bree ...
- java基础(十八)----- java动态代理原理源码解析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...
- JDK1.8源码(八)——java.util.HashSet 类
在上一篇博客,我们介绍了 Map 集合的一种典型实现 HashMap ,在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成,相对于早期版本的 JDK HashMap 实现,新增了红黑树 ...
- Java从零开始学三十八(JAVA IO- 重定向IO)
一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...
随机推荐
- 基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证.RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器. radius的验证的一般流程如下 ...
- JDBC_批量处理语句提高处理速度
•当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 •JDBC的批量处理语句包括下面两个方法: –addB ...
- python成长之路10
断点续传 python2.7 多继承 py35多继承 socketserver源码 支持并发处理socket i/o多路复用 上节回顾 socket ...
- r语言之散点图类型type参数
type参数用来控制所生成散点图的类型,有如下几个选项: type=“p”表示绘制单独的点 type=“l”表示绘制点连成的折线 type=“b”表示有线连接的点 type=“o”表示将点绘在线上 t ...
- 操作数组的工具类Arrays
Java提供的Arrays类里包含一些static修饰的方法可以直接操作数组. int binarySearch(type[] a, type key)使用二分法查询key元素值在a数组中出现的索引, ...
- 快捷查看dll的PublicKeyToken
@echo off d: cd D:\Win2003\Microsoft Visual Studio 10.0\VC\ call vcvarsall.bat x86 echo. if not '%1' ...
- C++ Primer 学习笔记_87_用于大型程序的工具 --异常处理
用于大型程序的工具 --异常处理 引言: C++语言包括的一些特征在问题比較复杂,非个人所能管理时最为实用.如:异常处理.命名空间和多重继承. 相对于小的程序猿团队所能开发的系统需求而言,大规模编程[ ...
- 直播时代--IOS直播客户端SDK,美艳直播【开源】
看到该文章我非常喜欢,为了方便自己查看和参考所以将其复制过来,源文地址:http://www.cnblogs.com/runner42/p/5241407.html 请支持原作者.原作者如看到请原谅复 ...
- C#学习之------委托
1.向窗体中添加控件的最少步骤: 窗体的句柄为this private System.Windows.Forms.Button button1; ...
- Python 操作Redis
redis对比monoDB: redis和memcache 是key value非关系型数据库,mysql是关系型数据库,表的结构和保存的内容有严格的要求,关系型数据库无法保存临时数据或不标准的数据, ...