1. 数据源(Data Source):是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。
数据宿(Data Sink):指能够接收数据的地方,可以是磁盘文件、网络接口以及显示器、打印机等外部设备。(数据宿也可认为是数据传输的目的地)
在国内业界,人们一般不对这两者进行仔细区分,而是统称为“数据源”
数据流:考虑到数据源的多样性,为了更有效地进行数据的输入、输出操作,Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式。传输中的数据就像流水一样,也称为数据流。
2. I/O数据流的分类方式
µ 按照数据流动的方向,可分为输入流(InputStream)和输出流(Output Stream)
ü 输入流只能从中读取数据,而不能向其写出数据;
ü 输出流则只能向其写出数据,而不能从中读取数据。
这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之“输入”数据,将程序中的数据传送到外部谓之“输出”数据。(这里说的读写,是指程序从外读或或向外写,所以觉得与平时说的别扭,猛一看,以为是错的,其实相反对着呢!)
3. 根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)
ü 节点流可以从/向一个特定的地方读/写数据。(“地方”就是数据源,如键盘或磁盘文件等。即节点流是直接连接到数据源的I/O流)
例,FileReader fr=newFileReader(“demo.txt”);
ü 处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。
例,BufferedReaderbr=new BufferedReader(new FileReader(“demo.txt”));
4. 按传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)
ü 字节流以字节为单位进行数据传输,每次传送一个或多个字节;
ü 字符流以字符为单位进行数据传输,每次传送一个或多个字符;(字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,将查到的字符返回)
ü 字节流可以处理所有类型的数据,如图片、mp3、avi
ü 字符流只能处理字符数据。
结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流
5. 输入/输出流体系
用于实现I/O操作的流类和接口在java.io包中。
Object |
InputStream |
OutputStream |
Reader |
Writer |
File |
RandomAccessFile |
注意:Java采用的命名惯例有助于我们区分字节流类型和字符流类型:凡是以InputStream或OutputStream结尾的类型均为字节流,凡是以Reader或Writer结尾的均为字符流。(IO体系中的子类名后缀都是父类名称,而前缀都是体现子类功能的名字)
6.标准输入输出是指在字符方式下(如DOS)程序与系统进行交互的方式。主要分为三种:
标准的输入,对象是键盘;
标准的输出,对象是显示器屏幕;
标准的错误输出,对象是显示器屏幕;
Java通过系统类System实现标准的输入输出功能。System类在java.lang包中,声明为一个final类。
public final class System extends Object
System类不能创建对象,而是要直接使用,其中有三个成员,分别是in、out、err。
Public static final InputStream in。
7. System.in作为输入流InputStream的对象,实现标准的输入,使用期read()方法从键盘接受数据。
System.out是打印流类PrintStream的对象,用来实现标准输出,其中有print()和println()方法,支持java中任意基本类型。
System.err与System.out相同,以PrintStream类的对象err实现标准的错误输出。
8. java提供了两个接口——FileFilter和FilenameFilter,用来实现对文件名字字符串的过滤。FileFilter接口用于抽象路径名的过滤器;FilenameFinter接口的实现类可用于过滤文件名。这两个接口都有accept()方法。FileFiler的accept(Filepathname)测试指定抽象路径名是否应该包含在某个路径名列表中;FilenameFilter中的accept(Filr dir,Stringname)测试指定文件是否应该包含在某一文件列表中。
显示清单时使用过滤器。
使用File类的list()方法和listFile()方法显示文件清单时,可以设置一个文件过滤器作为参数。
publicString[] list(FilenameFilter filter)
public File[]listFiles(FilenameFilter filter)
public File[]listFiles(FilenameFilter filter)
当调用list()方法或listFile()方法时,原始清单中的每个项目都将调用accept()方法。如果accept()方法返回true,则相应的项目就留在清单内。