记录生活中的点点滴滴

0%

day19

一、流的分类

 1.流的流向:输入流、输出流

 2.流中数据单位:字节流、字符流

 3.流的角色不同:节点流、处理流

二、 抽象基类 节点流(或文件流) 缓冲流(处理流的一种):提高数据读写效率

​ InputStream FileInputStream(read(byte[])) BufferedInputStream(read(byte[])

​ OutputStream FileOutputStream(write(byte[],0,len)) BufferedOutputStream(write(byte[],0,len)

​ Readed FileReader(read(char[])) BufferedReader(read(char[]) / readLine())

​ Writer FileWriter(write(char[],0,len)) BufferedWriter(write(char[],0,len)

从指定文件中读取数据到控制台上

 1.要去读的文件一定要存在的,否则报FileNotFoundException

 2.因为需要保证流的资源关闭,所以异常的处理需要使用try-catch-finally

字节流:

 输入流:FileInputStream

 1.创建一个文件,指明读取数据的来源

 2.将file对象作为参数传递到流的构造器中,创建一个字节的输入流:FileInputStream

 3.read():读取文件中的下一个字节。如果到达文件末尾的话,返回-1

 4.关闭资源

输出流:FileOutputStream

 1.造文件

 2.造流:输出流

 3.写出数据 getBytes() 字符串—>字节数组

 4.关闭资源

  * 如果输出的文件不存在,则在输出执行的过程中,自动创建此文件
  * 如果输出的文件存在:如果使用构造器:FileOutputStream(file)是对已存在的文件的覆盖,

​ 如果使用构造器:FileOutputStream(file,true)是在已有文件内容的基础上,继续写入内容

字符流

  FileReader 和 FileWriter的使用:只能用来处理文本文件的。

 FileInputStream 和 FileOutputStream:适合用来处理非文本文件:.avi , .mp3, .jpg, .doc

1.造文件

2.造流:字符的输入流、字符的输出流

3.读取数据并写出

4.关闭资源

缓冲流的使用。

 1.缓冲流是处理流的一种

 2.作用:提高数据的读写效率

 3.类: 处理非文本文件:

   BufferedInputStream

   BufferedOutputStream

    处理文本文件:

   BufferedReader

   BufferedWriter —>readLine 读取一行

           —>newLine 开始新的一行

理流之二:转换流

 1.转化流的作用:能够实现字节流与字符流之间的转换

 2.涉及到的流:

   InputStreamReader:实现字节的输入流转换为字符的输入流

   OutputStreamWriter:实现字符的输出流转换为字节的输出流

  编码的过程:字符串、字符数组—>字节数组

  解码的过程:字节数组—->字符串、字符数组

3.常见的编码集:

 ASCII:美国标准信息交换码,用一个字节的7位可以表示。

 ISO8859-1:拉丁码表。欧洲码表. 用一个字节的8位表示。

 GB2312:中国的中文编码表。

 GBK:中国的中文编码表升级,融合了更多的中文文字符号。

 Unicode:国际标准码,融合了多种文字。 所有文字都用两个字节来表示,Java语言使用的就是unicode

 UTF-8:最多用三个字节来表示一个字符

处理流之三:标准的输入、输出流

 System.in:标准的输入流,默认从键盘输入

 System.out:标准的输出流,默认从显示屏输出

  System.setIn():重新指定输入的位置

 System.setOut():重新指定输出的位置

处理流之四:打印流 PrintStream 和 PrintWriter

处理流之五:数据流 DataInputStream 和 DataOutpuStream

处理流之六:对象流

 1.作用:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中, 也能把对象从数据源中还原回来。

 2.涉及到的流:ObjectInputStream 和 ObjectOutputStream

 3.对象序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象.

提供一个自定义类,实现序列化机制。

 要求:1.自定义类实现Serializable接口

    2.需要给当前的类声明全局的常量:serialVersionUID

    3.要求类的属性也是可序列化的。 (默认情况下:String、基本数据类型都是可序列化的)

    注意:不能序列化static和transient修饰的成员变量

RandomAccessFile的使用:随机存取文件流

 1.RandomAccessFile在java.io包下声明,直接继承于Object类

 2.既可以作为输入流,又可以作为输出流。

 3.如果输出到的文件不存在,则会在输出的过程中,自动创建此文件 。 如果输出到的文件存在,

  则不是对文件的覆盖,而是对文件内容的覆盖。(默认从头覆盖)

 4.实现数据的“插入”