<一>
1.流的基本概念
2.流的分类
3.字节输入输出流
4.字符输入输出流
(1)什么是I/O?
硬件层面:I/O(input/output),即输入/输出。每个设备都会有一个专用的I/O地址,用来处理自己设备的输入输出信息。比如电脑设备输入端口为键盘和鼠标,输出端口为显示屏。
软件层面:I/O即不同存储机制上的数据的读入写出。比如内存读写硬盘中的数据或者U盘中的数据。
什么是I/O流?
流是指一定的介质按照一定的方向流动的行为,在软件开发中指的是存储的数据的流动过程,这个数据源可以是硬盘中的文件、内存或者是网络中的某个URL
I/O流专门用于软件开发层面的理解,把数据从一个存储介质写出(output)或者读取(input)到另外一个存储介质的过程表示为I/O流的模型
(2)流的分类
根据传输数据的类型分类
字节流:读取和写入数据的时候,以字节为最小单元进行读取和写入操作
字符流:读取和写入数据的时候,以字符为最小单元进行读取和写入操作,因为每个字符根据编码不同,所占用的字节个数不同,每次读取和写入字符时候,是不定长的字节个数写入读取。
拓展:字符编码即计算机通过二进制表示不同国家字符的方式
常用编码类型:UTF-8、GBK、ISO8859-1等
处理中文的编码类型utf-8占3个字节、GBK占2个字节
根据传输数据的方向分类
输入流:把数据从其他存储机制读入到当前内存机制当中
输出流:把内存当中的数据写出到其他存储机制当中
ava中I/O类关系
字节输入流抽象基类:Inputstream
字节输出流抽象基类:OutputStream
字符输入流抽象基类:Reader
字符输出流抽象基类:Writer
(3)字节输入输出流
文件字节输入流FileInputstream
FileInputStream
从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
int | available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。 |
void | close() 关闭此文件输入流并释放与此流有关的所有系统资源。 |
protected void | finalize() 确保在不再引用文件输入流时调用其 close 方法。 |
FileChannel | getChannel() 返回与此文件输入流有关的唯一 FileChannel 对象。 |
FileDescriptor | getFD() 返回表示到文件系统中实际文件的连接的 FileDescriptor 对象,该文件系统正被此 FileInputStream 使用。 |
int | read() 从此输入流中读取一个数据字节。 |
int | read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 |
int | read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 |
long | skip(long n) 从输入流中跳过并丢弃 n 个字节的数据。 |
文件输出流是用于将数据写入 File
或 FileDescriptor
的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
void | close() 关闭此文件输出流并释放与此流有关的所有系统资源。 |
protected void | finalize() 清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。 |
FileChannel | getChannel() 返回与此文件输出流有关的唯一 FileChannel 对象。 |
FileDescriptor | getFD() 返回与此流有关的文件描述符。 |
void | write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 |
void | write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 |
void | write(int b) 将指定字节写入此文件输出流。 |
(4)字符输入输出流
字符输入流FileReader
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
FileReader
用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream
。
abstract void | close() 关闭该流并释放与之关联的所有资源。 |
void | mark(int readAheadLimit) 标记流中的当前位置。 |
boolean | markSupported() 判断此流是否支持 mark() 操作。 |
int | read() 读取单个字符。 |
int | read(char[] cbuf) 将字符读入数组。 |
abstract int | read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 |
int | read(CharBuffer target) 试图将字符读入指定的字符缓冲区。 |
boolean | ready() 判断是否准备读取此流。 |
void | reset() 重置该流。 |
long | skip(long n) 跳过字符。 |
Writer | append(char c) 将指定字符添加到此 writer。 |
Writer | append(CharSequence csq) 将指定字符序列添加到此 writer。 |
Writer | append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。 |
abstract void | close() 关闭此流,但要先刷新它。 |
abstract void | flush() 刷新该流的缓冲。 |
void | write(char[] cbuf) 写入字符数组。 |
abstract void | write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | write(int c) 写入单个字符。 |
void | write(String str) 写入字符串。 |
void | write(String str, int off, int len) 写入字符串的某一部分。 |