day15-笔记

一.字符流回顾
 1.什么是IO流
  IO流就是用来处理设备之间的数据传输的工具.
 2.IO流分类
  InputStream, OutputStream, Reader, Writer
 3.使用IO流
  使用前导包
  使用时处理异常
  使用后关闭流
 4.使用字符流拷贝文件的方式
  FileReader和FileWriter
   逐个字符拷贝
   一次拷贝一个数组
  BufferedReader和BufferedWriter
   逐个字符拷贝, 内部封装了缓冲功能
   逐行拷贝
 5.包装设计模式
  定义一个成员变量, 持有被包装类对象的引用
  通过构造函数将对象传入, 之后可以通过成员变量调用被包装类方法
  拥有和被包装类相同的方法(功能), 在方法中调用被包装类的方法, 对其进行增强
  一般还会和被包装类实现或继承相同的父类, 这样包装类就可以当做被包装类来使用了
  
二.字节流
 1.什么是字节流
  InputStream和OutputStream的子类, 可以传输任意格式的二进制数据.
 2.使用字节流拷贝文件
  a).使用FileInputStream和FileOutputStream逐个字节拷贝
  b).使用FileInputStream和FileOutputStream定义数组拷贝
  c).使用BufferedInputStream和BufferedOutputStream内部的缓冲区拷贝
 3.思考问题:
  a).字节流是否可以拷贝文本文件:
   可以, 计算机中存储任何数据都是二进制, 字节流可以完成任何数据的传输
  b).如果可以拷贝, 那么为什么还要用字符流, 什么时候用字符流
   字符流提供了自动编码和解码的功能, 如果我们要读取字节显示成字符, 或者将字符输出, 这时用字符流就比较方便
   在数据传输时要编码解码的话, 就需要使用字符流.
  c).字节流读取字节时, 为什么返回int, 不直接返回byte
   因为byte中能存储的所有的数据都有可能在文件中存在, 从-128到127都有可能在文件中存在. -1也可能在文件中存在.
   如果直接返回一个普通的byte, 那么无法表示文件末尾.
   Java中的read()方法, 是将读取到的byte高位补0转为正数的int返回. 这样做读取到的所有字节不论正负, 都会被转为正数.
   这时遇到文件末尾就可以返回一个特殊的值, -1
   在转为正数的时候, 其实是改变了原本的字节值的, 但是写出数据时, 我们会将这个int值强转, 在强转时会砍掉前面24位, 也就是补得24个0, 这时这个字节又恢复到原有值了.
  
三.转换流
 1.什么是转换流
  转换流是对字节流的包装, 使用字节流读取写出方法, 在其读取写出的功能上增强, 可以自动编码解码.
 2.转换流使用
  InputStreamReader可以将InputStream转换为Reader, 提供自动解码的功能, 在读取的时候将读取到的二进制数据转换为字符返回.
  OutputStreamWriter可以将OutputStream转换为Writer, 提供自动编码的功能, 在写出数据的时候可以将要写出的字符转化为二进制写出.
 3.应用场景
  如果获取到一个字节流, 我们知道其中所有字节都对应字符, 那么可以将这个流转换为字符流, 操作更为方便.
  在程序中获取到的一个字节流(不能自己创建字符流的情况), 想从中读取字符时就可以使用转换流将其转换.
  
四.标准输入输出流
 1.System.in
  标准输入流, InputStream的子类, 默认是从键盘输入读取.
  可以通过System.setIn()方法改变标准输入流
 2.System.out
  标准输出流, PrintStream, 打印流
  可以通过System.setOut()方法改变标准输出流
  
五.流重点
 1.清楚什么是字节流, 什么是字符流. 什么时候用字节流, 什么时候用字符流.
 2.字节流的使用, 三种方式拷贝文件
  FileInputStream和FileOutputStream, 逐个字节拷贝
  FileInputStream和FileOutputStream, 自定义数组拷贝
  BufferedInputStream和BufferedOutputStream, 使用包装类提供的缓冲功能拷贝
 3.字符流的使用, 四种方式拷贝文件
  FileReader和FileWriter, 逐个字符拷贝
  FileReader和FileWriter, 自定义数组拷贝
  BufferedReader和BufferedWriter, 使用包装类提供的缓冲功能拷贝, 逐个字符
  BufferedReader和BufferedWriter, 使用包装类提供的缓冲功能拷贝, 逐行拷贝
 4.会使用转换流, 将一个字节流转换为字符流. InputStreamReader, OutputStreamWriter
 5.了解包装设计模式
 6.清楚乱码的原理, 以及解决方式
  
六.练习
 1.用三种方式拷贝mp3, 测运行效率.
 2.编写一个程序,记录该程序运行次数。运行满足5次,就提示用户“软件试用期限已到”;
 3.读取day15-笔记.txt文件, 将其复制到另一个文件中, 复制之后将文件中的所有行反转. 第一行和最后一行交换, 第二行和倒数第二行交换, 以此类推.
  读取时可以每次读一行, 将每一行数据作为一个元素装入集合, 反转集合中所有元素, 遍历集合, 将集合中所有元素写出到文件.
 4.对文件加密, 读取day15-笔记.txt文件, 将其中每一个字节异或(^)一个int值(密码), 将得到一个密文. 从密文再异或(^)那个int值(密码), 可以解密.
  逐个字节读取文件, 将每一个字节异或一个值. 就可以做到加密. 下次再读取每一个字节, 再次异或这个值, 就可以解密.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值