java基础之流和序列化

1.1)InputStream   
 void close()  
          关闭此输入流并释放与该流关联的所有系统资源。
abstract  int read()
          从输入流中读取数据的下一个字节。
 int read(byte[] b)
          从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

2).OutputStream  
 void close()
          关闭此输出流并释放与此流有关的所有系统资源。
 void flush()
          刷新此输出流并强制写出所有缓冲的输出字节。
 void write(byte[] b)
          将 b.length 个字节从指定的 byte 数组写入此输出流。
abstract  void write(int b)
          将指定的字节写入此输出流。         
          注意点
          1)读取文件的时候-文件必须存在
          2)写出文件的时候-文件可以不存在

3.copy文件
         * Copy数据

    a)创建输入输出数据源
    b)通过数据源创建输入输出流
    c)通过输入流循环的读取数据
    d)通过输出流循环的写出数据
    e)刷新流flush(如果需要数据-立即传入到数据源时,则需要调用)
    f)关闭流close
         关闭多个流
          a)每个流都要关闭
         b)先打开的后关闭

4.缓冲字符流-处理流
         * bufferedReader缓冲字符输入流
         * 增加功能
         * a)有缓冲区-提高性能
         * b)新增api:需要使用新增api-不能面向reader编程
         *   readLine  读一行字符数据
         *
         * bufferedWriter缓冲字符输出流
         * a)有缓冲区-提高性能
         * b)新增api:需要使用新增api-不能面向Writer编程
         *   newLine  写出一个换行符

5.缓冲流-》处理流(装饰模式-》装饰对象)-不能直接连数据源
         * 作用:提高输入输出的性能(针对[大量数据]读取和写出)
         *
         * ——》缓冲字节流
         * bufferdinputStream:缓冲字节输入流
         * bufferdoutputStream:缓冲字节输出流

6.计算机的文件
         *
         * a)字符文件:文本编辑器打开可以看懂字符的文件
         *   1)文本文件
         * b)字节文件:文本编辑器打开不能看懂字符的文件
         *     2)声音文件
         *     3)视频文件
         *     4)图片文件...
         *
         * 流分类
         * 1)字节流:可以处理:字符文件(需求手动编码解码-可能文字被分割),字节文件
         * 2)字符流:可以处理:字符文件(自动编码解码)
         *
         * 1)reader
abstract  void close()
          关闭该流并释放与之关联的所有资源。
int read()
          读取单个字符。
 int read(char[] cbuf)
          将字符读入数组。
2)writer
abstract  void close()
          关闭此流,但要先刷新它。
abstract  void flush()
          刷新该流的缓冲。
 void write(char[] cbuf)
          写入字符数组。
write(int c)
void write(String str)
          写入字符串。
7.FileReader读取字符数据-》默认采用当前java文件对应的字符集进行解码
             *
             * FileWriter写出字符数据-》默认采用当前java文件对应的字符集进行编码
             *
             * -->读取和写出其他字符集的字符文件
             * --》可以通过【转换流】完成

8.转换流(字节流———》字符流)
主要作用:把字节【整数】流转换为字符【字符】流(不能字符转字节流!-设置编码解码字符集)

1、OutputStreamWriter
    a)可以设置编码字符集
    b)进行字节输出流转字符输出流

2、InputStreamReader:字节输入流---转--》字符输入流
    a)可以设置解码字符集
    b)进行字节输入流转字符输入流

注意点
 1)转换流都带有缓冲区-不能设置大小,输出数据一定要刷新

9.打印流(处理流,也是节点流)
         * printStream ,printWriter(和printStream类似)
         *
         * 增加的功能: 把【程序的数据】【基本类型,引用类型】以【字符的形式】 写出到【数据源】
         *
         * 打印流-》  数据源的数据-》是字符数据-我们可以看懂
         *
         * 序列化的流-》  数据源的数据-》是字节数据-我们不能看懂
         * 怎么选择
         * 1)数据输出到数据源-长久存储-》序列化的流
         * 2)数据输出到数据源-给用户看-》打印流
         *
         * 新增api:-》不能面向outputstream编程
         * 1)print:把【基本类型,引用类型】写出去
         * 2)println:把【基本类型,引用类型】写出去,再写出换行
         *
         * 注意点
         * 1)基本类型写出的字符串-》值对应的字符串
         * 2)引用类型写出的字符串-》toSring的字符串

10.序列化概念
 
   a)序列化(输出):把程序中的数据    (基本类型,引用类型)以【字节数据】写出            到一个数据源

   b)反序列化(输入):把数据源序列化的数据  【字节数据】          读取到            程序中的数据(基本类型,引用类型)

 例子:  
    1)游戏本地存档
    2)网络传输,java里非(byte和char)的其他类型的数据。
    3)hibernate框架底层使用了
         *
         *
         *
         * 序列化的流(处理流)
         *
         * --》都新增api-不能面向超类型编程
         *
         * a)处理 【基本类型】【字符串】数据
         * 1)DataInputStream-》反序列化(输入)
         * 新增api:
         *  read基本类型
         *  readUTF
         * 2)DataOutputStream-》序列化(输出)
         * 新增api:
         *  write基本类型
         *  writeUTF  写字符串
         *
         *
         * b)处理 【基本类型】【引用类型】数据
         *
         * 1)ObjectInputStream
         *  新增api:
         *  read基本类型
         *  readUTF
         *  readObject
         * 2)ObjectOutputStream
         * 新增api:
         *  write基本类型
         *  writeUTF
         *  writeObject
         *  
         *  
         *  注意点
         *  1)序列化和反序列化处理数据的顺序要一致-》否则可能出现EOFException

 b)处理 【基本类型】【引用类型】数据
         *
         * 1)ObjectInputStream
         *  新增api:
         *  read基本类型
         *  readUTF
         *  readObject
         * 2)ObjectOutputStream
         * 新增api:
         *  write基本类型
         *  writeUTF
         *  writeObject
         *  
         *  
         *  注意点
         *  1)序列化和反序列化处理数据的顺序要一致-》否则可能出现EOFException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值