(2.1.21)IO流
2015-08-23 20:55
169 查看
ava语言的输入输出功能是十分强大而灵活的,对于数据的输入和输出操作以“流”(stream)的方式进行。J2SDK提供了各种各样的“流”类,用以获取不同种类的数据,定义在包java.io中。程序中通过标准的方法输入或输出数据。
Java中的流可以从不同的角度进行分类:
按照流的方向不同:分为输入流和输出流。
按照处理数据单位的不同:分为字节流(8位)和字符流(16位)。
按照功能不同:分为节点流和处理流。
节点流:是可以从一个特定的数据源(节点)读写数据的流(例如文件,内存)。就像是一条单一的管子接到水龙头上开始放水。
处理流:是“连接”在已经存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。就像在已经接了一条管子(节点流)的基础上,又套上几个更粗,具有特殊功能的管子(处理流)对流出的水进一步的处理。(java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node
stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。
)
J2SDK所提供的所有位于包java.io内的流类型都分别继承以下四种抽象流类型。
四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流,数据流,转换流,Print流,Object流等,都分别有特定的功能或用来操作特定的数据。其中深颜色的代表节点流,浅颜色的代表处理流。
这几个基本类的主要方法:
仔细观察,不难发现,InputStream和OutputStream,Reader和Writer的方法都是对称的,有写的方法就一定有读的方法。所以方法虽多,但很有规律。其他方法可以去java的API文档中查看。
节点流类型常见的有:
对文件操作的字符流有FileReader/FileWriter,字节流有FileInputStream/FileOutputStream。
处理流类型常见的有:
缓冲流:缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写效率,同事增加了一些新的方法。
字节缓冲流有BufferedInputStream/BufferedOutputStream,字符缓冲流有BufferedReader/BufferedWriter,字符缓冲流分别提供了读取和写入一行的方法ReadLine和NewLine方法。
对于输出地缓冲流,写出的数据,会先写入到内存中,再使用flush方法将内存中的数据刷到硬盘。所以,在使用字符缓冲流的时候,一定要先flush,然后再close,避免数据丢失。
转换流:用于字节数据到字符数据之间的转换。
仅有字符流InputStreamReader/OutputStreamWriter。其中,InputStreamReader需要与InputStream“套接”,OutputStreamWriter需要与OutputStream“套接”。
数据流:提供了读写Java中的基本数据类型的功能。
DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,需要“套接”在InputStream和OutputStream类型的节点流之上。
对象流:用于直接将对象写入写出。
流类有ObjectInputStream和ObjectOutputStream,本身这两个方法没什么,但是其要写出的对象有要求,该对象必须实现Serializable接口,来声明其是可以序列化的。否则,不能用对象流读写。
还有一个关键字比较重要,transient,由于修饰实现了Serializable接口的类内的属性,被该修饰符修饰的属性,在以对象流的方式输出的时候,该字段会被忽略。
相关文章推荐
- 读书笔记1-《万万没想到》
- A009-layout资源
- TCP/IP SOCKET HTTP及HTTPS之间的关系及各自特性之总结
- 王爽《汇编语言》第2版-----4、第一个程序
- Problem NYOJ-712 探寻宝藏 (双向DP)
- hdu 2975 Billboard
- 黑马程序员——27,正则表达式
- 一切从Markdown开始
- iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
- 线性同余方程组模板
- 上楼梯问题的解法
- android 自定义对话框
- java中hex转byte问题
- Feel Good(单调栈(比之前更加完善的模板))
- 【java开发】方法重写和方法重载概述
- Hibernate缓存
- 深入浅出PHP(Exploring PHP)
- 编程学习笔记之D语言(一)
- Linux命令详解(2):pwd
- CCActionInstant源码解析