【读书笔记】《java从小白到大牛》I/O流

quange 2022-5-6 147 5/6

Java将数据的输入输出(I/O)操作当作“流”来处理,“流”是一组有序的数据序列。“流”分为两种形式:输入流和输出流,从数据源中读取数据是输入流,将数据写入到目的地是输出流。

提示 以CPU为中心,从外部设备读取数据到内存,进而再读入到CPU,这是输入(Input,缩写I)过程;将内存中的数据写入到外部设备,这是输出(Output,缩写O)过程。所以输入输出简称为I/O。

以字节为单位的流称为字节流,以字符为单位的流称为字符流。Java SE提供4个顶级抽象类,两个字节流抽象类:InputStreamOutputStream;两个字符流抽象类:ReaderWriter

字节输入流

字节输入流根类是InputStream,它有很多子类

【读书笔记】《java从小白到大牛》I/O流

字节输出流

字节输出流根类是OutputStream,它有很多子类

【读书笔记】《java从小白到大牛》I/O流

字符输入流

字符输入流根类是Reader,这类流以16位的Unicode编码表示的字符为基本处理单位,它有很多子类

【读书笔记】《java从小白到大牛》I/O流

字符输出流

字符输出流根类是Writer,这类流以16位的Unicode编码表示的字符为基本处理单位。它有很多子类

【读书笔记】《java从小白到大牛》I/O流

字节流

InputStream抽象类

InputStream是字节输入流的根类,它定义了很多方法,影响着字节输入流的行为。

InputStream主要方法如下:

  • int read():读取一个字节,返回0到255范围内的int字节值。如果已经到达流末尾,而且没有可用的字节,则返回值-1。
  • int read(byte b[] ):读取多个字节,数据放到字节数组b中,返回值为实际读取的字节的数量,如果已经到达流末尾,而且没有可用的字节,则返回值-1。
  • int read(byte b[ ], int off, int len):最多读取len个字节,数据放到以下标off开始字节数组b中,将读取的第一个字节存储在元素b[off]中,下一个存储在b[off+1]中,依次类推。返回值为实际读取的字节的数量,如果已经到达流末尾,而且没有可用的字节,则返回值-1。
  • void close():流操作完毕后必须关闭

OutputStream抽象类

OutputStream是字节输出流的根类,它定义了很多方法,影响着字节输出流的行为。下面详细介绍一下。

OutputStream主要方法如下:

  • void write(int b):将b写入到输出流,b是int类型占有32位,写入过程是写入b 的8个低位,b的24个高位将被忽略。
  • void write(byte b[ ]):将b.length个字节从指定字节数组b写入到输出流。
  • void write(byte b[ ], int off, int len):把字节数组b中从下标off开始,长度为len的字节写入到输出流。
  • void flush():刷空输出流,并输出所有被缓存的字节。由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
  • void close( ):流操作完毕后必须关闭。

注意 流(包括输入流和输出流)所占用的资源,不能通过JVM的垃圾收集器回收,需要程序员自己释放。一种方法是可以在finally代码块调用close()方法关闭流,释放流所占用的资源。另一种方法通过自动资源管理技术管理这些流,流(包括输入流和输出流)都实现了AutoCloseable接口,可以使用自动资源管理技术,

字节缓冲流

BufferedInputStreamBufferedOutputStream称为字节缓冲流,使用字节缓冲流内置了一个缓冲区,第一次调用read方法时尽可能多地从数据源读取数据到缓冲区,后续再到用read方法时先看看缓冲区中是否有数据,如果有则读缓冲区中的数据,如果没有再将数据源中的数据读入到缓冲区,这样可以减少直接读数据源的次数。通过输出流调用write方法写入数据时,也先将数据写入到缓冲区,缓冲区满了之后再写入数据目的地,这样可以减少直接对数据目的地写入次数。使用了缓冲字节流可以减少I/O操作次数,提高效率。

BufferedInputStream构造方法主要有:

  • BufferedInputStream(InputStream in):通过一个底层输入流in对象创建缓冲流对象,缓冲区大小是默认的,默认值8192。
  • BufferedInputStream(InputStream in, int size):通过一个底层输入流in对象创建缓冲流对象,size指定的缓冲区大小,缓冲区大小应该是2的n次幂,这样可提供缓冲区的利用率。

BufferedOutputStream构造方法主要有:

  • BufferedOutputStream(OutputStream out):通过一个底层输出流out 对象创建缓冲流对象,缓冲区大小是默认的,默认值8192。

  • BufferedOutputStream(OutputStream out, int size):通过一个底层输出流out对象创建缓冲流对象,size指定的缓冲区大小,缓冲区大小应该是2的n次幂,这样可提高缓冲区的利用率。

字符流

注意Reader和Writer都实现了AutoCloseable接口,可以使用自动资源管理技术自动关闭它们。

Reader抽象类

Reader是字符输入流的根类,它定义了很多方法,影响着字符输入流的行为。

Reader主要方法如下

  • int read():读取一个字符,返回值范围在0~65535(0x00~0xffff)之间。如果因为已经到达流末尾,则返回值-1。
  • int read(char[] cbuf):将字符读入到数组cbuf中,返回值为实际读取的字符的数量,如果因为已经到达流末尾,则返回值-1。
  • int read(char[] cbuf, int off, int len):最多读取len个字符,数据放到以下标off开始字符数组cbuf中,将读取的第一个字符存储在元素cbuf[off]中,下一个存储在cbuf[off+1]中,依次类推。返回值为实际读取的字符的数量,如果因为已经到达流末尾,则返回值-1。
  • void close():流操作完毕后必须关闭。

Writer抽象类

Writer是字符输出流的根类,它定义了很多方法,影响着字符输出流的行为。

Writer主要方法如下

  • void write(int c):将整数值为c的字符写入到输出流,c是int类型占有32位,写入过程是写入c的16个低位,c的16个高位将被忽略。
  • void write(char[] cbuf):将字符数组cbuf写入到输出流。
  • void write(char[] cbuf, int off, int len):把字符数组cbuf中从下标off开始,长度为len的字符写入到输出流。
  • void write(String str):将字符串str中的字符写入输出流。
  • void write(String str,int off,int len):将字符串str 中从索引off开始处的len个字符写入输出流。
  • void flush():刷空输出流,并输出所有被缓存的字符。由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
  • void close( ):流操作完毕后必须关闭。

字符缓冲流

BufferedReader和BufferedWriter称为字符缓冲流。

BufferedReader特有方法和构造方法有

  • String readLine():读取一个文本行,如果因为已经到达流末尾,则返回值null。
  • BufferedReader(Reader in):构造方法,通过一个底层输入流in对象创建缓冲流对象,缓冲区大小是默认的,默认值8192。
  • BufferedReader(Reader in, int size):构造方法,通过一个底层输入流in对象创建缓冲流对象,size指定的缓冲区大小,缓冲区大小应该是2的n次幂,这样可提高缓冲区的利用率。

BufferedWriter特有方法和构造方法主要有

  • void newLine():写入一个换行符。
  • BufferedWriter(Writerout):构造方法,通过一个底层输出流out 对象创建缓冲流对象,缓冲区大小是默认的,默认值8192。
  • BufferedWriter(Writerout, int size):构造方法,通过一个底层输出流out对象创建缓冲流对象,size指定的缓冲区大小,缓冲区大小应该是2的n次幂,这样可提高缓冲区的利用率。

字节流转换字符流

有时需要将字节流转换为字符流,InputStreamReader和OutputStreamWriter是为实现这种转换而设计的。

InputStreamReader构造方法如下:

  • InputStreamReader(InputStream in):将字节流in转换为字符流对象,字符流使用默认字符集。
  • InputStreamReader(InputStream in, String charsetName):将字节流in转换为字符流对象,charsetName指定字符流的字符集,字符集主要有:US-ASCII、ISO-8859-1、UTF-8和UTF-16。如果指定的字符集不支持会抛出UnsupportedEncodingException异常。

OutputStreamWriter构造方法如下:

  • OutputStreamWriter(OutputStream out):将字节流out转换为字符流对象,字符流使用默认字符集。
  • OutputStreamWriter(OutputStream out,String charsetName):将字节流out转换为字符流对象,charsetName指定字符流的字符集,如果指定的字符集不支持会抛UnsupportedEncodingException异常。
- THE END -
最后修改:2022年5月6日
0

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的所有下载文件均为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。

共有 0 条评论