1、数据流的概念
计算机程序中,获取数据的方式有多种,比如:程序中直接给出、键盘输入、从数据文件中读取、从数据库中读取、通过网络读取等。
为了更有效地进行数据的输入/输出操作,Java将各种数据源的数据,抽象为“数据流”,及stream。
数据流:是指一组有顺序的、有起点和终端的字节集合,是对输入/输出的总称。
2、数据流的分类:
2.1、根据数据流的流向,可以将其分为输入流和输出流。
输入流的起点被称为源,程序是从指向源的输入流中读取源中的数据。
输入流中的数据只能读,不能写。
输出流的终点被称为目的地,程序通过向输出流中写入数据,把信息传递道目的地。
输出流中的数据只能写,不能读。
2.2、根据数据的传输单位,数据流可以分为字符流和字节流。
字节流(byte stream)以字节为单位,进行数据传输,可用于读写二进制数据。
字节流类一般以InputStream/OutputStream结尾。
字符流(character stream)以字符为单位,进行数据传输,用于处理文本数据,支持Unicode编码。
字符流一般以Reader/Writer结尾。
Java在java.io和java.util.zip包中,提供多种数据流类。
**
3、缓冲区:
**
数据流的操作,会涉及到外部设备,而,外部设备的读写速度比内存的读写速度要慢很多。如果直接在内存和外部设备之间传输数据,会音外部设备的速度限制,使得数据的传输效率变得很慢。在这种情况下,我们使用缓冲区的方法来提高内存与外部设备之间的数据传输效率。
缓冲区是在内存中,特地开辟出来的一块用于数据传输的空间。
只有当缓冲区的数据处于空或者满的时候,才会触发系统对外部设备进行写或读操作。
正是由于减少了传输数据时,系统对外部设备的调用次数,减少了调用时间开销,使得数据传输的整体效率提好。
4、Java的标准数据流:
Java的标准数据流分为标准输入流、标准输出流和标准错误输出流等。
Java通过系统类System实现标准输入/输出的功能。System的3个成员in、out和err分别对应于标准输入、标准输出和标准错误输出,其使用如下:
import java.io.IOException;
public class FileClass {
public static void main(String [] args){
System.out.println("这里是标准输出流。");
try{
System.out.println("请输入一个字符:");
System.out.println("下面是标准输入流:");
int a = 0;
a = System.in.read();
System.out.println("输入字符的ASCII码为:" + a);
} catch(IOException e){
e.printStackTrace();
}
System.err.println("这里是标准错误输出流");
}
}
输出结果如下:
这里是标准输出流。
请输入一个字符:
下面是标准输入流:
b
输入字符的ASCII码为:98
这里是标准错误输出流