77范文网 - 专业文章范例文档资料分享平台

第8章 IO_补充案例(2)

来源:网络收集 时间:2019-03-29 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

博学谷——让IT教学更简单,让IT学习更有效

}

}

}

try { } try { }

// 关闭流资源 fos.close();

e.printStackTrace();

throw new RuntimeException(\输出流关闭失败!\// 关闭流资源 fis.close();

e.printStackTrace();

throw new RuntimeException(\输入流关闭失败!\

} catch (IOException e) {

} catch (IOException e) {

程序运行结束后,打开target文件夹,发现source文件夹中的“IO流.avi”文件被成功拷贝到了target文件夹,如图8-4所示。

图8-4 拷贝结果

程序运行结束后,会在命令行窗口输出拷贝文件所消耗的时间,如图8-5所示:

图8-5 运行结果

从运行结果可以看出,使用自定义缓冲区拷贝大文件成功,而且耗时较短。

三、案例总结

1、由于计算机性能等各方面原因,会导致每次拷贝文件所消耗的时间未必相同。 2、在指定文件路径时使用了“\\\\”,这是因为在Windows目录路径基础上使用了转义符“\\”。 3、为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块中。

4、思考一下:使用自定义缓冲区拷贝文件时效率高耗时短,请修改Example03类,在不使用缓冲区的情况下拷贝文件,打印所消耗的时间,并与使用缓冲区所耗时间比较。代码如下:

import java.io.FileInputStream;

6

博学谷——让IT教学更简单,让IT学习更有效

import java.io.FileOutputStream; import java.io.IOException; public class Example03 { }

public static void main(String[] args) { }

FileInputStream fis = null; FileOutputStream fos = null; try { }

// 创建文件字符输出流和文件字符输入流对象

fis = new FileInputStream(\流.avi\fos = new FileOutputStream(\流.avi\// 创建字节数组,用于缓存读取的字节 int len = 0;

long starttime = System.currentTimeMillis();// 获取拷贝文件前的系统时间 // 读取到文件结束时,返回-1

while ((len = fis.read()) != -1) { }

long overtime = System.currentTimeMillis();// 获取拷贝文件结束的系统时间 System.out.println(\拷贝文件消耗的时间为:\毫秒\e.printStackTrace();

throw new RuntimeException(\拷贝文件失败!\try { } try { }

// 关闭流资源 fos.close();

e.printStackTrace();

throw new RuntimeException(\输出流关闭失败!\// 关闭流资源 fis.close();

e.printStackTrace();

throw new RuntimeException(\输入流关闭失败!\// 将缓冲区中的数据写入文件 fos.write(len);

} catch (IOException e) {

} finally {

} catch (IOException e) {

} catch (IOException e) {

7

博学谷——让IT教学更简单,让IT学习更有效

案例8-4 装饰设计模式的应用

一、案例描述

1、 考核知识点

编 号:00108006 名 称: 装饰设计模式

2、 练习目标

? 了解什么是装饰设计模式 ? 掌握装饰设计模式的应用

3、 需求分析

装饰设计模式是通过包装一个类,动态地增强它的功能的一个设计模式,为了让初学者掌握装饰设计模式的应用,在案例将通过使用NewPerson类装饰Person类,完成为Person类增强“吃饭”功能来学习。

4、 设计思路(实现原理)

1) 编写Person类,定义eat()方法,表示“吃饭”功能

2) 编写NewPerson类,定义一个有参构造方法,通过构造方法可以将Person对象传入该类,在

NewPerson类定义newEat()方法,该方法对“吃饭”功能进行了扩展和增强。

3) 编写Example04测试类,在main()方法中,分别通过Person和NewPerson对象调用装饰前后

的吃饭功能。

二、案例实现

/** * 被装饰类 */

class Person { } /** * 装饰类 */

class NewPerson {

// 装饰类中拥有被装饰类的引用 private Person p;

// 构造方法传入被装饰类的对象 public NewPerson(Person p) { }

8

this.p = p; // 吃饭功能

public void eat(){ }

System.out.println(\正在吃饭\

博学谷——让IT教学更简单,让IT学习更有效

} /**

* 测试类Example04 */

public class Example04 { }

public static void main(String[] args) { }

System.out.println(\装饰前----\Person p = new Person(); p.eat();

System.out.println(\装饰后----\//使用NewPerson类来装修Person类

NewPerson np = new NewPerson(new Person()); np.newEat(); // 通过装饰类增强吃饭功能 public void newEat() { }

System.out.println(\饭前小酒\p.eat();

System.out.println(\抽一根烟\System.out.println(\饭后甜点\

运行结果如图8-6所示。

图8-6 运行结果

从运行结果可以看出,通过装饰设计模式成功增强了“吃饭”功能,达到预期效果。

三、案例总结

1、装饰设计模式具有以下特点:

(1) 装饰对象包含一个被装饰对象的引用。

(2) 装饰对象接受所有来自客户端的请求,再把这些请求转发给被装饰的对象。 (3) 装饰对象可以给被装饰对象增强功能。

(4) 一般情况下装饰和被装饰对象会具有相同的接口。

2、思考一下:装饰设计模式可以通过一个类增强另一个类的功能,而使用继承子类也可以对父类中的功能进行增强,针对增加功能这种情况请问使用装饰设计模式和继承有什么区别。

9

博学谷——让IT教学更简单,让IT学习更有效

案例8-5 字节缓冲流拷贝大文件

一、案例描述

1、 考核知识点

编 号:00108007 名 称: 字节缓冲流

2、 练习目标

? 了解什么是字节缓冲流 ? 了解字节缓冲流的优点

? 掌握如何使用字节缓冲流拷贝文件

3、 需求分析

我们学习过使用自定义缓冲区高效读写文件,其实Java自身也提供了两个带缓冲的字节流,分别是BufferedInputStream和BufferdOutputStream。为了熟悉这两个字节缓冲流的使用,案例中将通过使用字节缓冲流一次读写一个字节数组的方式拷贝文件来学习。

4、 设计思路(实现原理)

1) 在source目录下存放“IO流.avi”文件,并确保target目录下没有上次拷贝遗留的文件。 2) 编写Example05类。在main()方法中,分别创建缓冲字节输出流和缓冲字节输入流对象,并

指定拷贝文件的源及目标路径。

3) 定义一个字节数组作为缓冲区,缓冲输入流将源文件数据读取到缓冲区中,然后缓冲输出流

将缓冲区中数据写入到目标文件中,循环往复直到文件拷贝结束,并计算拷贝文件总耗时。 4) 使用close()方法,关闭流资源。

二、案例实现

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /**

* 字节缓冲流一次读写一个字节数组 */

public class Example05 {

public static void main(String[] args) {

BufferedInputStream bis = null; BufferedOutputStream bos = null; try {

bis = new BufferedInputStream(

new FileInputStream(\流.avi\\流.avi\

10

bos = new BufferedOutputStream(new FileOutputStream(

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第8章 IO_补充案例(2)在线全文阅读。

第8章 IO_补充案例(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/555447.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: