第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 复制文本文件
字节流复制文件
字符流复制文件
可以看得出,只是调用的方式转换了一下。
图解
读取文件图解
文件复制图解