没有合适的资源?快使用搜索试试~ 我知道了~
Java基础知识-day10【缓冲流、转换流、序列化流、Files】.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 128 浏览量
2023-10-26
18:11:21
上传
评论
收藏 772KB PDF 举报
温馨提示
试读
16页
java学习课件,供参考学习使用
资源推荐
资源详情
资源评论
day10【缓冲流、转换流、序列化流】
主要内容
转换流
缓冲流
序列化流
打印流
教学目标
能够使用字节缓冲流读取数据到程序
能够使用字节缓冲流写出数据到文件
能够明确字符缓冲流的作用和基本用法
能够使用缓冲流的特殊功能
能够阐述编码表的意义
能够使用转换流读取指定编码的文本文件
能够使用转换流写入指定编码的文本文件
能够说出打印流的特点
能够使用序列化流写出对象到文件
能够使用反序列化流读取文件到程序中
第一章 缓冲流
昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够
转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上
创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。
1.1 概述
缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类:
字节缓冲流: BufferedInputStream , BufferedOutputStream
字符缓冲流: BufferedReader , BufferedWriter
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO
次数,从而提高读写的效率。
1.2 字节缓冲流
构造方法
publicBufferedInputStream(InputStreamin) :创建一个 新的缓冲输入流。
publicBufferedOutputStream(OutputStreamout) : 创建一个新的缓冲输出流。
构造举例,代码如下:
效率测试
查询API,缓冲流读写方法与基本的流是一致的,我们通过复制大文件(375MB),测试它的效率。
1. 基本流,代码如下:
2. 缓冲流,代码如下:
//创建字节缓冲输入流
BufferedInputStreambis=newBufferedInputStream(newFileInputStream("bis.txt"));
//创建字节缓冲输出流
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("bos.txt"));
publicclassBufferedDemo{
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
//记录开始时间
longstart=System.currentTimeMillis();
//创建流对象
try(
FileInputStreamfis=newFileInputStream("jdk9.exe");
FileOutputStreamfos=newFileOutputStream("copy.exe")
){
//读写数据
intb;
while((b=fis.read())!=‐1){
fos.write(b);
}
}catch(IOExceptione){
e.printStackTrace();
}
//记录结束时间
longend=System.currentTimeMillis();
System.out.println("普通流复制时间:"+(end‐start)+"毫秒");
}
}
十几分钟过去了...
publicclassBufferedDemo{
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
//记录开始时间
longstart=System.currentTimeMillis();
//创建流对象
try(
BufferedInputStreambis=newBufferedInputStream(newFileInputStream("jdk9.exe"));
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("copy.exe"));
){
如何更快呢?
使用数组的方式,代码如下:
1.3 字符缓冲流
构造方法
publicBufferedReader(Readerin) :创建一个 新的缓冲输入流。
publicBufferedWriter(Writerout) : 创建一个新的缓冲输出流。
//读写数据
intb;
while((b=bis.read())!=‐1){
bos.write(b);
}
}catch(IOExceptione){
e.printStackTrace();
}
//记录结束时间
longend=System.currentTimeMillis();
System.out.println("缓冲流复制时间:"+(end‐start)+"毫秒");
}
}
缓冲流复制时间:8016毫秒
publicclassBufferedDemo{
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
//记录开始时间
longstart=System.currentTimeMillis();
//创建流对象
try(
BufferedInputStreambis=newBufferedInputStream(newFileInputStream("jdk9.exe"));
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream("copy.exe"));
){
//读写数据
intlen;
byte[]bytes=newbyte[8*1024];
while((len=bis.read(bytes))!=‐1){
bos.write(bytes,0,len);
}
}catch(IOExceptione){
e.printStackTrace();
}
//记录结束时间
longend=System.currentTimeMillis();
System.out.println("缓冲流使用数组复制时间:"+(end‐start)+"毫秒");
}
}
缓冲流使用数组复制时间:666毫秒
构造举例,代码如下:
特有方法
字符缓冲流的基本方法与普通字符流调用方式一致,不再阐述,我们来看它们具备的特有方法。
BufferedReader: publicStringreadLine() : 读一行文字。
BufferedWriter: publicvoidnewLine() : 写一行行分隔符,由系统属性定义符号。
readLine 方法演示,代码如下:
newLine 方法演示,代码如下:
//创建字符缓冲输入流
BufferedReaderbr=newBufferedReader(newFileReader("br.txt"));
//创建字符缓冲输出流
BufferedWriterbw=newBufferedWriter(newFileWriter("bw.txt"));
publicclassBufferedReaderDemo{
publicstaticvoidmain(String[]args)throwsIOException{
//创建流对象
BufferedReaderbr=newBufferedReader(newFileReader("in.txt"));
//定义字符串,保存读取的一行文字
Stringline=null;
//循环读取,读取到最后返回null
while((line=br.readLine())!=null){
System.out.print(line);
System.out.println("‐‐‐‐‐‐");
}
//释放资源
br.close();
}
}
publicclassBufferedWriterDemothrowsIOException{
publicstaticvoidmain(String[]args)throwsIOException{
//创建流对象
BufferedWriterbw=newBufferedWriter(newFileWriter("out.txt"));
//写出数据
bw.write("黑马");
//写出换行
bw.newLine();
bw.write("程序");
bw.newLine();
bw.write("员");
bw.newLine();
//释放资源
bw.close();
}
}
输出效果:
黑马
剩余15页未读,继续阅读
资源评论
等天晴i
- 粉丝: 3509
- 资源: 10万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功