Java之I/O流(第1部分)
Java 中的I/O流:
1. 输入/输出流原理:
如下图所示:在 java 程序中,对于数据的输入/输出操作以“流”(Stream)的方式进行;J2SDK 提供了各种各样的“流”类,用来获取不同种类的数据;程序中通过标准的方法输入或输出数据.

2. 输入/输出流的分类:
2.1 java.io 包中定义了多个流类型(类或者抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类:
① 按数据流的方向的不同:输入流、输出流
② 按处理数据单位的不同:字节流、字符流
③ 按其功能的不同:节点流、处理流.
2.2 J2SDK 提供的所有流类型位于 java.io 内都分别继承以下四种抽象类型:
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
3. 节点流、处理流:
3.1 节点流是一个可以从特定的数据源(节点)读写数据(如:文件、内存)

3.2 处理流是“连接”在已存在的流(节点流、或处理流)之上,通过对数据的处理为程序提供更为强大的读写能力.

4. InputStream:
继承自 InputStream 的流都是用于向程序中输入数据,且数据的单位为一个字节(8bit),该类的所有方法在遇到错误时,都会抛出 IOException 异常.

4.1 InputStream 的基本方法:
4.1.1 int read() throws IOException // 从数据流中读取一个字节,返回 0~255 范围内的 int 字节值;如果返回 -1,则说明已经读到了输入流的末尾;
4.1.2 int read(byte[] buffer) throws IOException // 读取一系列字节并存储到一个数组 buffer,返回实际读取的字节数;若读取前已经到了输入流的末尾,则返回 -1;
4.1.3 int read(byte[] buffer,int offset,int length) throws IOException // 读取 length 个字节,并存储到一个字节数组 buffer,从 offset 位置开始返回实际读取的字节数;若返回 -1,则表示到了输入流的末尾;
4.1.4 mark(int readLimit) throws IOException // 在输入流的当前位置放一个标记,readLimit 参数表示此输入流在标记位置失效之前,允许读取的字节数;
4.1.5 reset() throws IOException // 指针返回当前所做的标记处;
4.1.6 void close() throws IOException // 关闭流,释放内存资源;
4.1.7 long skip(long n) throws IOException // 跳过 n 个字节不读,返回实际跳过的字节数;
5. OutputStream:
继承自 OutputStream 的流是用于向数据源中输入数据,且数据的单位为一个字节(8bit).

5.1 OutputStream 的基本方法:
5.1.1 void write(int b) throws IOException // 向输出流中写入一个字节数据,该字节数据为参数 b 的低 8 位;
5.1.2 void write(byte[] b) throws IOException // 将一个字节类型的数组中的数据写入输出流;
5.1.3 void write(byte[] b,int offset,int length) throws IOException // 将一个字节类型的数组中从指定位置(offset)开始的 length 个字节写入到输出流;
5.1.4 void close() throws IOException // 关闭流,释放内存资源;
5.1.5 void flush() throws IOException // 将输出流中缓冲的数据全部写出到目标文件.
【注】:在 close 文件之前,记得 flush 一下,将缓冲区的内容全部写出去.
6. Reader:
继承自 Reader 的流都是用于向程序中输入数据(从数据源中读出数据),且数据的单位为一个字符(16bit)

6.1 Reader 的基本方法:
6.1.1 int read() throws IOException // 读取一个字符,返回 0~255 范围内的 int 字节值;如果返回 -1,则说明已经读到了输入流的末尾;
6.1.2 int read(char[] buffer) throws IOException // 读取一系列字符并存储到一个数组 buffer,返回实际读取的字符数;若读取前已经到了输入流的末尾,则返回 -1;
6.1.3 void read(char[] buffer,int offset,int length) throws IOException // 读取 length 个字符,并存储到一个字符数组 buffer,从 offset 位置开始返回实际读取的字符数;若返回 -1,则表示到了输入流的末尾;
6.1.4 void close() throws IOException // 关闭流,释放内存资源;
6.1.5 long skip(long n) throws IOException // 跳过 n 个字符不读,返回实际跳过的字符数.
7. Writer:
继承自 Writer 的流是用于向数据源中写数据,且数据的单位为一个字符(16bit).

7.1 Writer 的基本方法:
7.1.1 void write(int c) throws IOException // 向输出流中写入一个字符数据,该字符数据为参数 b 的低 16 位;
7.1.2 void write(char[] arr) throws IOException // 将一个字符类型的数组中的数据写入输出流;
7.1.3 void write (char[] arr,int offset,int length) throws IOException // 将一个字符类型的数组中的从指定位置(offset)开始的 length 个字符写入到输出流;
7.1.4 void write(String str) throws IOException // 将一个字符串中的字符写入到输出流;
7.1.5 void wriet (String str,int offset,int length) throws IOException // 将一个字符串中从 offset 开始的 length 个字符写入到输出流;
7.1.6 void close() throws IOException // 关闭流,释放内存资源;
7.1.7 void flush() throws IOException // 将输出流中缓冲的数据全部写出到目标文件.
Java之I/O流(第1部分)的更多相关文章
- java 字节流和字符流的区别 转载
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- java 21 - 12 IO流的打印流
打印流 字节流打印流 PrintStream 字符打印流 PrintWriter打印流的特点: A:只有写数据的,没有读取数据.只能操作目的地,不能操作数据源.(只能写入数据到文件中,而不能从文件中提 ...
- Java中的IO流系统详解(转载)
摘要: Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- Java中的IO流系统详解
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- java开发之IO流
一直对IO流记不清楚,从别的地方转过来. 看下图: 流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两 ...
- java中的IO流
Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...
- Java IO 文件与流基础
Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...
- JAVA通过I/O流复制文件
JAVA通过I/O流复制文件 本文是对字节流操作,可以多音频视频文件进行操作,亲测有效. 个人感觉这个东西就是靠记的, 没什么好解释的,,,, import java.io.File; import ...
- java中的缓冲流BufferedWriter和BufferedReader
java中的缓冲流有BufferedWriter和BufferedReader 在java api 手册中这样说缓冲流: 从字符输入流中读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取.可以指 ...
随机推荐
- springboot+layui实现增删查改
本文描述springboot和layui的结合,采用了springboot内置的jdbc,根据不同需要可以进行修改:分页采用了layui中自带分页格式! ----------------------- ...
- Linux phpmailer发送邮件失败的解决方法
(本地windows phpmailer发送ok 放到linux发送失败) 原因:linux 通过465端口进行更安全的SMTPS协议发送邮件 windows 是基于smtp 25端口的 因此 可 ...
- yii学习笔记(5),视图操作
在控制器调用$this->render()方法来输出视图 function actionLogin(){ $name = "admin"; // 加载视图 return $t ...
- 20145202马超 2016-2017-2《Java程序设计》课程总结
学号 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1(http://www.cnblogs.com/tuolemi/p/6193756.html ...
- solr 常见的问题整理 -费元星
本文是我在开发过程中遇到的一些问题的整理,有些摘自网上别人的方法. 1. org.apache.solr.client.solrj.SolrServerException: Timeout occur ...
- hdu1159Common Subsequence(动态规划)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 第五篇 Flask组件之SQLAchemy及Flask-SQLAlchemy插件/Flask-Script/Flask-migrate/pipreqs模块
SQLAlchemy组件 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然 ...
- Linux命令应用大词典-第17章 软件包管理
17.1 rpm:RPM软件包管理器 17.2 rpmargs:处理RPM软件包 17.3 rpmbuild:构建RPM软件包 17.4 rpmdiff:比较两个软件包之间的不同 17.5 rpmel ...
- PyCharm 2018 最新激活方式总结(最新最全最有效)!!!
PyCharm 2018 最新激活方式总结(最新最全最有效!!!) pycharm2018 是目前python编程的主要应用工具,具有非常广泛的应用,不过对于它的破解一直比较麻烦,这里我为大家提供了三 ...
- lintcode12 带最小值操作的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 建一个栈helpStack,用来存放从 ...