字节流、IO异常的处理、字节输入输出流、字符流、字符输入输出流、复杂文件

第1章     字节流

IO分字节流和字符流,字符流只能TXT文件,字节流都可以

字节流分字节输入流和字节输出流

1.1                字节输出流OutputStream

OutputStream是抽象类

1.1.1    FileOutputStream类

l  构造方法

 

 

1.1.1    给文件中续写和换行(输出流)

 

1.2                IO异常的处理

 

1.3                字节输入流InputStream

1.3.1    FileInputStream类

l  构造方法

 

 

FileInputStream类读取数据read方法

在读取文件中的数据时,调用read方法,实现从文件中读取数据

 

字节流两种读取方式

1、一个字节一个字节的

 

2、一数组一数组的

 

第2章     字符流

字符流跟字节流一个样,就是调用的方式转换了一下

2.1                字符编码表

最常用的两种码表

ascii: 一个字节中的7位就可以表示。对应的字节都是正数。0-xxxxxxx

GBK:目前最常用的中文码表,2万的中文和符号。用两个字节表示,其中的一部分文字,第一个字节开头是1,第二字节开头是0

能识别中文的码表:GBK、UTF-8;正因为识别中文码表不唯一,涉及到了编码解码问题。

对于我们开发而言;常见的编码 GBK  UTF-8  ISO-8859-1

文字--->(数字) :编码。 “abc”.getBytes()  byte[]

(数字)--->文字  : 解码。 byte[] b={97,98,99}  new String(b,0,len)

2.2                字符输入流Reader

Reader,读取字符流的抽象超类。所以得用FileReader类

 

l  read():读取单个字符并返回

l  read(char[]):将数据读取到数组中,并返回读取的个数。

2.2.1    FileReader类

 

一个字节一个字节的

 

一数组一数组的

 

2.3                字符输出流Writer

 

2.3.1    输出FileWriter类

 

这里的100是用的ACSII表,系统自动解码转换

2.4                flush()和close()的区别?

 

flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

代码执行之后就释放一下,因为所有代码都在一个缓存区力,要是代码量多了会占用太多缓存区,

简单说,就和吃饭一样,flush就跟吃饭一样,flush就是吃一口,和一口水换换

close就是吃完饭再喝水

2.4.1    复制文本文件

字节流复制文件

 

字符流复制文件

 

可以看得出,只是调用的方式转换了一下。

图解

读取文件图解

 

文件复制图解

 

原文地址:https://www.cnblogs.com/pandam/p/11186986.html