`
lyunabc
  • 浏览: 551781 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

第十二章 java流与文件操作 第二讲

 
阅读更多

第十二章 java流与文件操作 第二讲

二 缓冲字符流的应用 BufferedReader BufferedWriter

1.缓冲字符流出现的原因:FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。

2. 缓冲字符流的优点:是为了提高效率。

3. 缓冲字符的原理:就是对数组进行封装。因为在运用缓冲的过程中,在读取时是在调用read(),当调用的字符已满所定的内存时,就会封装成数组去访问磁盘文件。

4. 缓冲字符的构造方法:

public BufferedReader(Readerin);

注意:参数ReaderBufferedReader的父类,只要是Reader的子类都可以传过来,体现了类的多态性。

public BufferedReader(Readerin, intsz);

注意:intsz 是制定缓冲区的内存容量

public BufferedWriter(Writerout) ;

public BufferedWriter(Writerout, intsz);

5.对缓冲字符流的实例的部分代码:----蓝色部分是会缓冲流的创建

FileWriter fw=null;

BufferedWriter bw=null;

try {

fw = new FileWriter("demo.txt");//字符的输出流,数据的写入

bw = new BufferedWriter(fw);//构建缓冲的字符流,对已有流的封装

bw.write("hell0");

bw.newLine();//增加换行符

bw.write("java");

bw.newLine();

bw.flush();//把缓冲区的内容刷新到目的地

}

6. 缓冲字符流有几个特有的方法:

public String readLine();

public void newLine();

对readLine()方法的使用的部分代码:

FileReader fr = null;

BufferedReader br = null;

try {

fr=new FileReader("res/demo.txt");

br = new BufferedReader(fr,255);//255指定缓冲区

String str= null;

while((str=br.readLine())!=null){

System.out.print(str);

}

7.在懂得缓冲流方法中的readLine()的原理后,可以根据原理自己创建一个缓冲流的类,下面是一个缓冲流类的实例:

import java.io.*;

public class MyBufferedReader {

//类的属性,代表普通 的字符输入流对象,修饰的对象

private Reader r;//利用自己类的父类可以接受子类,从而体现多态性

//构造方法

static int n=1;

public MyBufferedReader(Reader r){//体现多态性

this.r=r;

}

//readLine()方法:实现的功能是读一行,增加缓冲区,然后调用r对象的read()读取字符放在缓冲区中,

//当读到行标记时,就把缓冲区中的字符中的字符转换成字符串返回

public String readLine(){

//缓冲区

StringBuffer strB = new StringBuffer();

int ch = 0;

try {

while((ch=r.read())!=-1){

//'\r'和'\n'是回车换行,只有在两个都存在时才可实现

if(ch=='\r'){

continue;

}

if(ch=='\n'){

return (n++)+"\t"+new String(strB);// 等价 strB.toString()

}else{

strB.append((char)ch);//追加放置在缓冲区里

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//当读到最后一行的时候,判断最后一行是否到结尾,是否有字符返回。

if((strB.length())!=0){

return new String(strB);

}

return null;

}

//close()方法

public void close(){

try {

r.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

8.装饰设计模式和继承的区别

装饰设计模式比继承有更好的灵活性。因为装饰模式和继承相比,继承中的类在建立缓冲字符流时,是在每次使用时建立一个,这样的重复性会很大,如果用装饰模式,可以只建立一个类,只要在使用时调用它就行了。就好比是抽象类、接口一样,把共同的东西提前出来。

当然,每个事物都是有两方面的,有优点必定有缺点。

出现的新的问题:该类虽然完成对已有两个对象的增强。但是当有新的对象出现时,还要继续在该类中添加构造函数。这样不利于扩展和维护。

二 缓冲字符流的应用 BufferedReader BufferedWriter

1.缓冲字符流出现的原因:FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。

2. 缓冲字符流的优点:是为了提高效率。

3. 缓冲字符的原理:就是对数组进行封装。因为在运用缓冲的过程中,在读取时是在调用read(),当调用的字符已满所定的内存时,就会封装成数组去访问磁盘文件。

4. 缓冲字符的构造方法:

public BufferedReader(Readerin);

注意:参数ReaderBufferedReader的父类,只要是Reader的子类都可以传过来,体现了类的多态性。

public BufferedReader(Readerin, intsz);

注意:intsz 是制定缓冲区的内存容量

public BufferedWriter(Writerout) ;

public BufferedWriter(Writerout, intsz);

5.对缓冲字符流的实例的部分代码:----蓝色部分是会缓冲流的创建

FileWriter fw=null;

BufferedWriter bw=null;

try {

fw = new FileWriter("demo.txt");//字符的输出流,数据的写入

bw = new BufferedWriter(fw);//构建缓冲的字符流,对已有流的封装

bw.write("hell0");

bw.newLine();//增加换行符

bw.write("java");

bw.newLine();

bw.flush();//把缓冲区的内容刷新到目的地

}

6. 缓冲字符流有几个特有的方法:

public String readLine();

public void newLine();

对readLine()方法的使用的部分代码:

FileReader fr = null;

BufferedReader br = null;

try {

fr=new FileReader("res/demo.txt");

br = new BufferedReader(fr,255);//255指定缓冲区

String str= null;

while((str=br.readLine())!=null){

System.out.print(str);

}

7.在懂得缓冲流方法中的readLine()的原理后,可以根据原理自己创建一个缓冲流的类,下面是一个缓冲流类的实例:

import java.io.*;

public class MyBufferedReader {

//类的属性,代表普通 的字符输入流对象,修饰的对象

private Reader r;//利用自己类的父类可以接受子类,从而体现多态性

//构造方法

static int n=1;

public MyBufferedReader(Reader r){//体现多态性

this.r=r;

}

//readLine()方法:实现的功能是读一行,增加缓冲区,然后调用r对象的read()读取字符放在缓冲区中,

//当读到行标记时,就把缓冲区中的字符中的字符转换成字符串返回

public String readLine(){

//缓冲区

StringBuffer strB = new StringBuffer();

int ch = 0;

try {

while((ch=r.read())!=-1){

//'\r'和'\n'是回车换行,只有在两个都存在时才可实现

if(ch=='\r'){

continue;

}

if(ch=='\n'){

return (n++)+"\t"+new String(strB);// 等价 strB.toString()

}else{

strB.append((char)ch);//追加放置在缓冲区里

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//当读到最后一行的时候,判断最后一行是否到结尾,是否有字符返回。

if((strB.length())!=0){

return new String(strB);

}

return null;

}

//close()方法

public void close(){

try {

r.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

8.装饰设计模式和继承的区别

装饰设计模式比继承有更好的灵活性。因为装饰模式和继承相比,继承中的类在建立缓冲字符流时,是在每次使用时建立一个,这样的重复性会很大,如果用装饰模式,可以只建立一个类,只要在使用时调用它就行了。就好比是抽象类、接口一样,把共同的东西提前出来。

当然,每个事物都是有两方面的,有优点必定有缺点。

出现的新的问题:该类虽然完成对已有两个对象的增强。但是当有新的对象出现时,还要继续在该类中添加构造函数。这样不利于扩展和维护。

分享到:
评论

相关推荐

    Java语言程序设计基础第十版第十二章课后复习题答案

    根据提供的信息,我们可以总结出以下关于《Java语言程序设计基础第十版》第十二章的一些关键知识点及解答: ### 一、异常处理基本概念 #### 12.1 **问题:** 异常处理的主要思想是什么? **解答:** 异常处理的主要...

    java第十三章Java 输入输出流.rar

    Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它允许程序处理数据的读取和写入操作。在Java中,一切皆为对象,所以输入和输出操作也被抽象成了一系列的类,这些类构成了Java I/O系统的核心。本章主要涵盖...

    深入JAVA虚拟机第二版.pdf 目录

    第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑...

    java面向对象程序设计课程每章ppt(共15章+复习1章).zip

    第2章 Java基础.pptx 第3章 数组.pptx 第4章 类和对象(1).pptx 第4章 类和对象(2).pptx 第5章 类的继承.pptx 第6章 抽象类和接口.pptx 第7章 多态.pptx 第8章 包装器类.pptx 第9章 内部类.pptx

    Java文件操作源码大全

    Java文件操作是编程中常见的任务,...以上只是Java文件操作的一部分知识点,实际开发中还会涉及文件权限控制、并发访问、流操作等更多内容。了解并熟练掌握这些知识点,能帮助开发者高效、安全地处理各种文件操作需求。

    JAVA解析DBC文件

    这可能涉及到对信号值进行转换,比如将二进制数据转换成十进制或十六进制,或者进行浮点数计算。 在实际应用中,解析DBC文件的JAVA程序可能会被集成到更复杂的系统中,如汽车诊断工具、数据记录器或仿真环境。这些...

    北大青鸟S1JAVA第十二章课后练习详解

    在北大青鸟S1JAVA课程的第十二章中,学员们会接触到一系列深入的Java编程概念和实践。这一章节的课后练习旨在巩固所学知识,提升编程技能。以下是本章涉及的一些关键知识点: 1. **面向对象编程基础**:在Java中,...

    Java第三十五——三十六讲总结-输入输出流.doc

    ### Java第三十五至三十六讲知识点总结:输入输出流 #### 一、输入输出流概述 在Java中,输入输出流是进行数据读写的重要工具。主要包括以下几类: 1. **字节流**:主要涉及`InputStream`(输入字节流)和`...

    java开发实战经典第十二章课后习题答案

    《Java开发实战经典》是许多Java初学者的重要学习资料,其第十二章涵盖了诸多关键知识点。这章可能涉及了面向对象编程的深入理解、异常处理、集合框架的使用、多线程、网络编程或者IO流等内容。课后习题通常用于巩固...

    Java语言程序设计(梁勇)第21-30章全部完整习题答案

    第23章可能涉及输入输出流(I/O流),这是处理文件读写、网络通信的基础。学习如何使用FileInputStream、FileOutputStream,以及掌握缓冲区的概念,如BufferedReader和BufferedWriter,能有效提升数据传输效率。 第...

    深入Java虚拟机(原书第2版)及书中源代码

    第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑...

    java语言程序与数据结构梁勇第十版第七章复习题答案

    在“Java语言程序与数据结构梁勇第十版第七章复习题答案”中,我们主要探讨的是Java编程语言的基础知识,特别是与数据结构相关的概念。Java作为一种面向对象的编程语言,对于初学者来说,理解其基本语法、类和对象、...

    第二章第十四节——文件操作控件

    在本章第十四节中,我们将深入探讨文件操作控件的概念、功能以及如何在不同编程环境中实现它们。 首先,了解文件操作控件的基本概念是必要的。文件操作控件是UI中的组件,通常表现为按钮、对话框、菜单项等形式,...

    第12章输入输出流、文件及数据库操作.doc

    在Java编程中,输入输出流(Input/Output Stream)是数据传输的核心机制,用于处理程序与外部世界的交互,包括键盘、显示器、文件和网络等。本章主要关注的是输入输出流、文件操作以及数据库操作。 12.1 输入输出流...

    《Java语言程序设计(进阶篇)》 课后习题第21章代码chapter21.rar

    《Java语言程序设计(进阶篇)》是深入学习Java编程的一本重要教材,其中第21章的课后习题代码集包含了丰富的Java高级特性应用实例,旨在帮助读者巩固和提升在面向对象编程、异常处理、多线程、网络编程、IO流等方面...

    java课件1到12章

    12. **第十二章:Java Swing图形界面编程** - Swing组件库:JFrame、JButton、JLabel、JTextArea等 - 布局管理器:FlowLayout、BorderLayout、GridLayout、BoxLayout - AWT与Swing的区别 - Event监听机制 这些...

    第十二章输入输出流-java程序设计ppt讲义.ppt

    Java中的输入输出流(I/O流)是Java程序与外部数据源交互的重要工具,它允许程序从设备(如键盘、磁盘、网络等)读取数据或将数据写入到这些设备。在Java中,I/O流被设计为一种抽象概念,以提供与设备无关的输入输出...

    Java Web开发实例大全

    第2章 发送与接收邮件 第2篇 数据库应用篇 第3章 数据库操作技术 第4章 SQL语句应用技术 第5章 复杂查询技术 第6章 数据库高级应用 第3篇 图表统计篇 第7章 JFreeChart绘图基础 第8章 基础图表技术 第9章 扩展图表...

    JAVA语言程序设计(基础篇)第5章答案.doc

    在本节中,我们将深入探讨Java编程语言中的几个基本概念,这些都是从提供的文件【标题】"JAVA语言程序设计(基础篇)第5章答案.doc"和【描述】中提取的知识点。这些知识点主要涉及控制流(如循环和条件判断)、输入/...

    第12讲 Java有几种文件拷贝方式?哪一种最高效?1

    第二种方法是利用Java.NIO类库,特别是`FileChannel`的`transferTo`或`transferFrom`方法。这种方法可以更有效地利用现代操作系统的底层机制,例如零拷贝(zero-copy),减少数据在用户空间和内核空间之间的复制,...

Global site tag (gtag.js) - Google Analytics