java核心内库---IO(2)

一.拷贝指定目录里的文件到指定目录

实例如下(实质是利用了文件名称过滤器):


二.文件的字符输出流

字节输出流和字符输出流的区别:
 *      字符输出流可以直接向外写一个字符串.而字节输出流不行
 *      字节流需要创建的是byte[]数组,而字符流需要创建的是char[]数组或者直接输出字符串
 * ------------------------------------------------          
 * flush(刷新)操作,输出流中都有flush方法
 * 计算机访问外部设备(磁盘文件),要比直接访问内存慢的多,如果每次write都要直接写出到
 * 磁盘文件中,CPU都会花更多的时间,此时我们可以存储一个内存缓冲区,程序每次write方法
 * 都是直接写到内存缓冲区中,当内存缓冲区满后,系统才把缓冲区内容一次性写出给磁盘文件
 * 
 * ------------------------------------------------
 * 使用缓冲区的好处:
 *         1.提高CPU使用率
 *         2.有机会回滚写入的数据
 * ------------------------------------------------       
 * 对于字节流,flush方法不是都有作用(部分字节流才有作用),  对于字符流都有作用
 * 系统在调用close()方法关闭资源之前,都会调用flush()方法
 * 
 * ------------------------------------------------
 * 操作系统使用-1表示磁盘文件的结尾标记

 * 缓冲区大小一般使用容量整数倍,可以提高IO性能

实例如下:


三.文件的字符输入流

* 为什么要使用字符输入流而不是一直使用字节输入流?
 *     因为字节流操作汉字或特殊的符号语言的时候容易乱码,建议使用字符流
 * 先有字节流,才有字符流
 * 在字符流中一个文字,一个符号,一个字母均代表一个字符
 * 在字节流中一个汉字最少代表两个字节
 *     
 * 
 * 使用记事本打开某个文件,可以看到内容的就是文本文件,否则是二进制文件
 * 一般的,操作二进制文件(图片,音频,视频等)必须使用字节流
 * 一般的,操作文本文件,使用字符流,使用字节流也可以,但是容易出现问题

 * 如果不清楚文件是那一类型的,使用字节流

四.文件字符流的拷贝操作


五.字符解码和编码操作

 字符的编码和解码操作:
 * 编码: 把字符串转换为byte数组;
 * 解码: 把byte数组转换为字符串
 * 

 * 一定要保证编码和解码的字符集相同,否则会出现乱码

实例如图:


六.包装流和缓冲流的引入和定义

 * 1.处理流/包装流(相对于节点流更高级)
 * 2.使用处理流包装了节点流,程序直接操作处理流.让节点流与底层的设备做IO操作
 * 3.只需关闭处理流即可
 * 
 * 包装流如何区分?   写代码的时候发现创建对象的时候,需要传递另一个流对象
 * new 包装流(流对象)
 * 
 * 
 * 什么是缓冲流?
 *   是一个包装流/处理流,目的是其缓冲作用
 *    BufferedInputStream;
 *    BufferedOutputStream;
 *    BufferedReader;
 *    BufferedWriter;
 *    
 *    
 * 缓冲流的目的:
 *   操作流的时候,习惯定义一个byte/char数组
 *   int read():每次从磁盘中读取一个字节.直接操作磁盘文件性能极低
 *   
 *   解决方案:定义一个数组作为缓冲区
 *   byte[] buffer=new byte[1024];该数组其实就是一个缓冲区
 *   一次性从磁盘文件中读取1024个字节,如此一来,操作文件磁盘的次数就少了,性能得以提升
 *   在使用缓冲流的时候一般有两个数组,一个大缓冲区(内存),一个小缓冲区,读取操作,先把文件读到
 *   大缓冲区中,再把文件读到小缓冲区中,   大缓冲区一般使用默认缓冲区(内存)
 *   
 *   既然我们都能想到,sun公司早都想到了,提供的默认缓冲区大小是8192(1024*8),我们一般

 *   不用修改大小

缓冲流的示意图:

七.字节缓冲流

实例如图:


八.字符缓冲流

实例如图:


九.节点流和缓冲流的性能对比

实例如图:


十.转换流

转换流:把字节流转换为字符流

 *  InputStreamReader:把字节输入流转换为字符输入流
 *  OutputStreamWriter:把字节输出流转换为字符输出流
 *  
 * 为什么有字节流转换为字符流而没有字符流转换为字节流?
 *   字节流可以操作一切文件(纯文本文件/二进制文件),但是用字节流操作纯文本文件容易出现乱码
 *   字符流是用来操作 纯文本文件使用的,   使用的本身是对字节流的加强
 *   
 * 构造方法:
 *   public InputStreamReader(InputStream in,Charset cs)创建使用给定字符集的 InputStreamReader。

 *   public OutputStreamWriter(OutputStream out,Charset cs)创建使用给定字符集的 OutputStreamWriter。 

实例如图:


十一.合并流

 SequenceInputStream的两个构造方法:
 1).public SequenceInputStream(InputStream s1,InputStream s2)

     通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2)

实例如图:

2). public SequenceInputStream(Enumeration e)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值