概念
Java流式I/O类都包含在java.io包中。有各种不同的流类来满足不同性质的输入/输出需要。根据流中的数据单位不同,Java提供了字节流和字符流两个类的层次体系来处理输入/输出。
流(Stream):一个有序的字节序列。
输入流:从某种数据源(如键盘、磁盘文件、网络等)到程序的一个流,程序可以从这个流中读取数据。
输出流:从程序到某种目的地(如键盘、磁盘文件、网络等)的一个流,程序可以将这些信息写入到这个流。
字节流&字符流
字节流:面向字节的流,流中的数据以8位字节为单位进行读写。通常用于读写二进制数据,如图像和声音。
InputStream和OutputStream是抽象类,它们分别为字节输入和输出操作定义了方法,它们的子类重载或覆盖了这些方法。
字符流:面向字符的流,流中的数据以16位字符为单位进行读写。特别注意的是,为满足国际化表示要求,Java的字符编码是采用16位表示一个字符的Unicode码,而普通的文本文件采用的是8位的ASCII码。
Reader和Writer是抽象类。它们分别为字符输入和输出操作定义了方法,它们的子类重载或覆盖了这些方法。这些方法与InputStream和OutputStream类定义的方法类似,只是读写的数据由8位byte数据变为了16位char数据。
输入/输出字符流层次结构图.jpg
其他流类:除InputStream、OutputStream、Reader、Writer类及其子类外,与流有关的类还有:File类、FileDescriptor类、StreamTokenizer类和RandomAccessFile类。
File类:是磁盘文件和目录的抽象表示,能够使程序获得一个文件或目录的信息。
FileDescriptor类:用于以构造文件描述符对象。程序一般不使用FileDescriptor类对象。
StreamTokenizer类:用于将任何InputStream分割为一系列“记号(Token)”。这些记号实际是一些断续的文本块,中间用我们选择的任何东西分隔。例如,我们的记号可以是单词,中间用空白(空格、回车、Tab等)以及标点符号分隔。
RandomAccessFile类:用于实现对随机访问文件的读取和写入。
注意的点
1、FileOutPutStream(String fileName,boolean append);
- append = true:表示追加
- append = false:表示覆盖
2、缓冲器的细节:Buffer由数据和可以高效地访问及操作这些数据的四个索引组成。四个索引是:mark(标记)、position(位置)、limit(界限)和capacity(容量)。
3、java.lang.process:包含输入流、输出流、错误流。
网友评论