王金阳总结(day19)

2021-06-15 19:39发布

1.字符高效流

1.BufferedInputStream  为另一个输入流添加一些功能 会创建一个内部缓冲区数组

2.BufferedOutputStream 该类实现缓冲的输出流  会创建一个内部缓冲区数组

3.注意点:BufferedInputStream BufferedOutputStream 本身没有读取操作的功能  

使用的InputStream OutputStream 读写操作的功能  只是对这个两个流进行封装 底层封装了一个缓冲区数组(8192) 使得变为高效率

4.常用的构造方法

方法的名称

方法的说明

public BufferedOutputStream(OutputStream out)

创建一个新的缓冲输出流,以将数据写入指定的底层输出流

public BufferedInputStream(InputStream in)

创建一个 BufferedInputStream 并保存其参数

5.高效流高效的原因:

   BufferedInputStream 底层会创建一个缓冲区的数组 缓冲区的数组的长度是8192  每次读取文件的内容的时候

   一次性读取8192个字节的数据 保存到数组中 每次使用io流读取数据是从数组中读取数据

   就可以反复与磁盘进行交互  从内存中获取数据比从磁盘中获取数据快  io流把数组的数据读完之后

   再次会从磁盘中读取 8192个字节的数据 保存到数组中

2.关闭流资源

1.使用IO流资源的时候出产生异常  异常处理 抛出 捕获

  异常的类型明确与异常作用明确的时候  就使用捕获  可以避免程序终止  发生异常之后 继续执行后面的代码

  异常的类型不确定的时候 需要声明异常 来终止程序

  在开发中所有的流资源的异常处理 都需要进行捕获

2.流资源关闭的注意点

  (1)所有的异常都需要在finally中关闭资源

  (2)流资源关闭 一定是从下往上关闭资源

  (3)关闭流资源的时候 一定要进行非空验证

3.flush()close()的比较

1.flush()刷新缓冲区 ==> 将缓冲区的数据刷新的磁盘(文件)
2.close()关闭流资源
3.close()底层调用flush()方法
4.flush()close()区别
   调用flush()方法流资源还是可以使用的
   调用close()方法流资源就不能使用了

 

3.字符流概念

1.字符流:用于来操作字符(读写)的流

2.使用字符流的原因:使用字节流读取文件中的字符 可能会出现乱码

  使用字节流读取字符操作不是特别方便 需要使用字符流

3.字符流底层就是还是还是字节流来进行操作只是底层将字节转换为字符

  字符流= 字节流+编码表  字节流 用于读取文件中字节  编码表 == 将字节按照编码表转换为字符

4.所有的编码表下 中文的第一个字节都是负数  根据这个规律来进行转换

 

4.编码表

1.字符集:全世界国家通常使用语法中字符的集合 例如:中文   英文   日语....

2.计算机在存储各个国家的字符的时候 都是依据编码表来进行一一存储

  一种字符集 必定对应一种编码  只有通过编码表才能进行相互的转换

3.常用的编码表

   ASCLL: 范围: 0-127 主要包含的是西欧国家的一些英文字符

   GBK : GB2313延伸的一种码表 GBK 主要包含 中文 日文 韩文... 一些字符

   Unicode 范围 0-65535(就是char 字符的范围) 万国码表 全世界通用的一种码表  国际进行交互的规范

   UTF-8 :在国内通常使用的码表 包括大量的中文汉字 大部分数据交互都是使用UTF-8来进行设置编码表

4.GBK  一个中文占两个字节   UTF-8  一个中文占三个字节  都是以负数开头


5.字符串的编码解码

方法的名称

方法的说明

public byte[] getBytes()

使用平台的默认字符集将此 String 编码为 byte 序列

public byte[] getBytes(String charsetName)

public byte[] getBytes(String charsetName)

public String(byte[] bytes)

通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

public String(byte[] bytes, Charset charset)

通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String

 

6.字符流-

1.Writer 写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)flush() close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能

2.子类: FileWriter ==> OutputStreamWriter==> Writer <==BufferedWriter 字符高效流

3.FileWriter 用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在FileOutputStream 上构造一个 OutputStreamWriter

4.FileWriter 用于写入字符流。要写入原始字节流,请考虑使FileOutputStream

方法的名称

方法的说明

public FileWriter(File file)

根据给定的 File 对象构造一个 FileWriter 对象

public FileWriter(File file, boolean append)

根据给定的 File 对象构造一个 FileWriter 对象(append 为true 从文件内容的末尾处开始写入 append 为false 从头开始写入)

public FileWriter(String fileName)

根据给定的文件名构造一个 FileWriter 对象

 

7.字符流-

1.Reader 用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能

2.子类 FileReader ==>InputStreamReader==> Reader   

BufferedReader(高效流) ==>Reader

3.FileReader

用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader

FileReader 用于读取字符流。要读取原始字节流,请考虑使FileInputStream

4.常用的构造方法

构造方法的名称

构造方法说明

public FileReader(File file)

在给定从中读取数据的 File 的情况下创建一个新 FileReader

public FileReader(String fileName)

在给定从中读取数据的文件名的情况下创建一个新 FileReader

 

8.转换流-

1.InputStreamReader 是字节流通向字符流的桥梁

2.可以设置charset 指定其编码格式

3.为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader

4.常用的构造方法

方法的名称

方法的说明

public InputStreamReader(InputStream in)

创建一个使用默认字符集的 InputStreamReader

public InputStreamReader(InputStream in, String charsetName)

创建使用指定字符集的 InputStreamReader

 

9.转换流-

1.OutputStreamWriter 是字符流通向字节流的桥梁

2.可以设置charset 指定其编码格式

3.为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter

4.常用的构造方法

方法的名称

方法的说明

public OutputStreamWriter(OutputStream out)

创建使用默认字符编码的 OutputStreamWriter

public OutputStreamWriter(OutputStream out, String charsetName)

创建使用指定字符集的 OutputStreamWriter

 

10.字符高效-

1.从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

2.可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了

3.常用的构造方法

方法的名称

方法的说明

public BufferedReader(Reader in)

创建一个使用默认大小输入缓冲区的缓冲字符输入流

4.独有的方法

方法的名称

方法的说明

public String readLine()

一行一行的读取

 

11.字符高效-

1.文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

2.可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了

3.常用的构造方法