第十四章 输入输出流和缓冲区

第十四章  输入输出流和缓冲区
第十四章  输入输出流和缓冲区

第十四章对C语言输入输出流和缓冲区的深入理解

14.1对C语言输入输出流的深入理解

程序开始执行时,默认会打开 stdin、stdout和stderr三个文件,所以我们使用 scanf()、printf() 等函数时就不需要再使用 fopen() 显式打开这些文件。

C语言打开文件时,先将文件内容载入缓冲区(缓存),并返回一个指向FILE结构体的指针,接下来对文件的操作,都映射成对缓冲区的操作,只有当强制刷新缓冲区、关闭文件或程序运行结束时,才将缓冲区中的内容更新到文件。就像编辑word文档,并不是立刻将编辑好的内容写入到磁盘上的文件,而是对缓存中的副本进行操作,只有当保存文件时,才将副本同步到磁盘上的文件。

缓冲区有很多类型,我们这里指的缓冲区是主存(内存条)上的一块特殊区域,专门用来缓存数据,供程序读写。

而由于硬件不同,将缓冲区的内容同步到文件的过程可能比较繁杂,不易操作,这些都由操作系统完成,对编程人员不可见,编程人员只要能操作接口简单的缓冲区即可。

14.2 C语言缓冲区(缓存)详解

深入理解缓冲区请查看:结合缓冲区谈谈C语言getchar()、getche()、getch()的区别

14.3结合缓冲区谈谈C语言getchar()、getche()、

getch()的区别

三个函数的对比

程序运行后,首先停下来,等待输入一个字符串,输入完毕后,它会把你输入的整个字符串都输出来了。

这是为什么?getchar()不是只返回第一个字符么,这里为什么全部输出了?

因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的缓冲区中,就好像开闸放水,你把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,这里开闸动作就相当于调用一次getchar()。我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓

冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到不满足循环条件退出为止。

例子中循环条件里的'\n'实际上就是你输入字符串后的回车符,所以意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如while ((c=getchar())!='a'),就是遇到字符'a'就停止循环,当然意思是如果你输入

“12345a213123/n”那么只会输出到a,结果是12345a。

base // 缓冲区基地址

在上面我们向缓冲区中放入了10个字节大小的数据,FILE结构体中的 cnt 变为了10 ,说明此时缓冲区中有10个字节大小的数据可以读,同时我们假设缓冲区的基地址也就是 base 是0x00428e60 ,它是不变的,而此时 ptr 的值也为0x00428e60 ,表示从0x00428e60

这个位置开始读取数据,当我们从缓冲区中读取5个数据的时候,cnt 变为了5 ,表示缓冲区还有5个数据可以读,ptr 则变为了0x0042e865表示下次应该从这个位置开始读取缓冲区中的数据,如果接下来我们再读取5个数据的时候,cnt 则变为了0 ,表示缓冲区中已经没有任何数据了,ptr 变为了0x0042869表示下次应该从这个位置开始从缓冲区中读取数据,但是此时缓冲区中已经没有任何数据了,所以要将输入流中的剩下的那10个数据放进来,这样缓冲区中又有了10个数据,此时 cnt 变为了10 ,注意了刚才我们讲到 ptr 的

值是0x00428e69 ,而当缓冲区中重新放进来数据的时候这个 ptr 的值变为了

0x00428e60 ,这是因为当缓冲区中没有任何数据的时候要将 ptr 这个值进行一下刷新,使其指向缓冲区的基地址也就是0x0042e860这个值!因为下次要从这个位置开始读取数据!在这里有点需要说明:当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n 也会被存储在缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

缓冲区的刷新就是将指针 ptr 变为缓冲区的基地址,同时 cnt 的值变为0 ,因为缓冲区刷新后里面是没有数据的!

针也并不为NULL。

输入输出流实验六

实验五 Java 输入输出流 1.实验目的 (1) 掌握输入输出流的总体结构; (2) 掌握流的概念; (3) 了解各种流(包括文件流、管道流、连接文件、过滤流、对象的序列化、随机访问)的使用。 2.实验内容 实验题1 编写一个Java Application程序,打印命令行输入的所有参数。 [基本要求] 编写完整程序。 程序代码为: package输入输出流; import java.io.*; public class IO_1 { public static void main(String[] args) { for (int i = 0; args != null && i < args.length; i++) { System.out.println("第" + i + "个参数是" + args[i]); } // 创建文件对象 File f = new File("D:/java/A.txt"); if (!f.exists()) { try { f.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { // 将文件读取到内存中 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("请输入:"); String s = br.readLine(); System.out.println("您输入的内容是:" + s); // 将内存写入到文件里面 FileWriter fw = new FileWriter(f, true); BufferedWriter bw = new BufferedWriter(fw); bw.write(s); //关闭流

输入输出流实验

深圳大学 实验报告 课程名称: Java 实验序号:上机实践9 实验名称:统计英文单词&读取Zip文件 班级:计算机3 姓名:卢志敏 同组人:实验日期: 2008 年 12 月 29 日 教师签字:

一、实验目的 掌握RandomAccessFile类的使用。 掌握ZipInputStream流的使用。 二、实验环境 WinXp SP 3 三、实验要求 实验1 使用RandomAccessFile流统计一篇英文中的单词,要求如下: (1)一共出现了多少个英文单词。 (2)有多少个互不相同的单词。 (3)给出每个单词出现的频率,并将这些单词按频率大小顺序显示在一个Text--Area中。 实验2 读取,并将中含有的文件重新存放到当前目录中的book文件夹中,即将的内容解压到book文件夹中。 四、实验步骤和内容 实验1 源代码: import .*; import class WordStatistic

{ Vector allWords,noSameWord; WordStatistic() { allWords=new Vector(); noSameWord=new Vector(); } public void wordStatistic(File file) {try { RandomAccessFile inOne=new RandomAccessFile(file,"rw");; import class StatisticFrame extends Frame implements ActionListener { WordStatistic statistic; TextArea showMessage; Button openFile; FileDialog openFileDialog; Vector allWord,noSameWord; public StatisticFrame() { statistic=new WordStatistic(); showMessage=new TextArea(); openFile=new Button("Open File"); (this); add(openFile,; add(showMessage,;

C++输入输出流实验报告

深圳大学实验报告 实验课程名称:程序设计实验与课程设计 实验项目名称:实验10 C++流输入与流输出 学院:计软专业:计科 报告人:学号:班级: 3 同组人:无 指导教师:朱安民 实验时间:2014年6月16日提交时间:2014年6月16 声明: 本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。 教务处制

一、实验目的 1.掌握标准输入输出(iostream库中标准对象cin、cout)的使用 2.掌握IO流类成员函数输入输出(cin.get, cin.getline, cin.read; cout.put, cout.write)的使用 3.掌握输出格式(标准控制符、IO流类成员函数、iomanip头文件中的控制符)控制方法 4.掌握磁盘文件的输入输出方法 二、实验说明和实验环境 1.在奥特曼类的基础上,编写一个程序,重载运算符“》”和“《”,使得用户可以直接(格式化)输出奥特曼的状态。在主程序中输入若干个(3个)奥特曼的状态,并分别将它们保存到文件RecordU.txt中。然后读取并显示文件中的内容。 2.奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 在奥特曼的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0 在怪兽的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍 对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 注意:为了实现运算符《重载,需要包含头文件 经常天降怪石会砸中奥特曼或怪兽,如果被幸运石砸中,就会处于“鸿运当头”状态,被砸对象除等级外其它属性全部翻倍;如果被厄运石砸中,就会陷入“倒霉透顶”状态,被砸对象除等级外其它属性全部减半。把“鸿运当头”封装成操作,并用重载运算符++来实现;“倒霉透顶”封装成操作,并用重载运算符--来实现。两个重载都需要用友元方法。 3.奥特曼和怪物经过一番战斗斗,需要中场休息,休息时把各自的属性值存放到一个文件中,休息结束时需要从文件中读取之前的状态继续战斗。 奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 奥特曼和怪兽的属性值均来自于文件(文件的第一行是奥特曼的数据,初始状态为:等级是8,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0,文件的第二行是怪兽的数据,初始状态为等级是4,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍)对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 把信息直接从文件读出来并赋值给奥特曼和怪兽,需要重载》运算符作为友元; 把奥特曼和怪兽的值写入文件,要求重载《运算符作为友元

第十章 输入输出系统习题

第十章输入输出系统习题 一、单项选择题: 1、“总线忙”信号是由__ __建立的。 A.获得总线控制权的设备B.发出“总线请求”的设备 C.总线控制器D.CPU 2、在不同速度的设备之间传送数据__ __。 A.必须采用同步控制方式B.必须采用异步控制方式 C.可以选用同步方式,也可选用异步方式D.必须采用应答方式 3、挂接在总线上的多个部件___ _。 A.只能分时向总线发送数据,并只能分时从总线接收数据 B.只能分时向总线发送数据,但可同时从总线接收数据 C.可同时向总线发送数据,并同时从总线接收数据 D.可同时向总线发送数据,但只能分时从总线接收数据 4、总线从设备是____。 A.掌握总线控制权的设备 B.申请作为从设备的设备 C.被主设备访问的设备D.总线裁决部件 5、假设某系统总线在一个总线周期中传输4个字节信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽是__ __。 A.10 MB/s B.20 MB/s C.40 MB/s D.80 MB/s 6、波特率表示传输线路上____。 A.信号的传输速率B.有效数据的传输速率 C.校验信号的传输速率D.干扰信号的传输速率 7、中断系统中的断点是指____。 A.子程序入口地址B.中断服务子程序入口地址 C.中断服务程序入口地址表D.中断返回地址 8、显示器的主要参数之一是分辨率,其含义是____。 A.显示屏幕的水平和垂直扫描频率 B.显示屏幕上光栅的列数和行数 C.可显示不同颜色的总线 D.同一个画面允许显示不同颜色的最大数目 9、下列选项中,能引起外部中断的事件是____。 A.键盘输入B.除数为0 C.浮点运算下溢D.访存缺页 10.CPU响应中断时,最先完成的两个步骤是_ __和保护现场信息。 A.开中断 B.恢复现场 C.关中断 D.不可屏蔽中断 11、在独立编址方式下,存储单元和I/O设备是靠来区分的。 A.不同的地址代码B.不同的地址总线 C.不同的指令和不同的控制信号D.上述都不同 12、计算机系统的输入/输出接口通常是__ __。 A.CPU与存储器之间的交界面B.存储器与打印机之间的交界面 C.主机与外围设备之间的交界面D.CPU与系统总线之间的交界面 13.根据连线的数量,总线可分为串行总线和_____ ___总线

第10章-输入输出流

1.下列流类中可以用于处理文件的是()。Empty! (D) (a) ios (b) iostream (c) strstream (d) fstream 2.在下列选项中()是istream类的对象。Empty! (B) (a) cerr (b) cin (c) clog (d) cout 3.read函数的功能是从输入流中读取()。Empty! (D) (a) 一个字符(b) 当前字符(c) 一行字符(d) 指定若干个字节 4.下列选项中,用于清除基数格式位设置以十六进制输出的语句是()。Empty! (B) (a) cout << setf( ios::dec, ios::basefield ) ; (b) cout << setf( ios::hex, ios::basefield ) ; (c) cout << setf( ios::oct, ios::basefield ) ; (d) cin >> setf( ios::hex, ios::basefield ) ; 5.下列格式控制符,既可以用于输入,又可以用于输出的是()。Empty! (A) (a) setbase (b) setfill (c) setprecision (d) setw 6.下列串流类,在strstream.h中定义的是()。Empty! (B) (a) istringstream (b) istrstream (c) ostringstream (d) stringstream 7.包含类fstream定义的头文件是()。Empty! (A) (a) fstream.h (b) ofstream.h (c) ifstream.h (d) iostream.h 8.要求打开文件 D:\file.dat,并能够写入数据,正确的语句是()。Empty! (D) (a) ifstream infile( "D:\\file.dat", ios::in ) ; (b) ifstream infile( "D:\\file.dat", ios::out ) ; (c) ofstream outfile( "D:\\file.dat", ios::in ) ;

实验6 输入输出流操作

实验6 输入输出流操作 一、实验目的 1. 理解数据流的概念 2. 理解Java流的层次结构 3. 理解文件的概念 二、实验要求 1. 掌握字节流的基本使用方法 2. 掌握字符流的基本使用方法 3. 能够创建、读写、更新文件 三、实验练习内容 1. Java的标准输入输出流System.in/System.out 知识点解析: 标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。 示例:课本例10.1 2. 文件字节输入输出流类FileInputStream/ FileOutputStream 知识点解析: 文件字节输入输出流主要负责完成对本地磁盘文件的顺序输入与输出操作。示例:课本例10.2 3. 数据字节输入输出流DataOutputStream/DataInputStream 知识点解析: 使用数据输入流DataOutputStream 和数据输出流DataInputStream 可以读取或写入8种基本数据类型的数据,不用关心它们的实际长度是多少字节。一般与文件输入流FileInputStream 和输出流类FileOutputStream 一起使用。 示例:课本例10.3 4. 对象字节输入输出流ObjectInputStream/ ObjectOutputStream 知识点解析: 使用对象流可以直接写入或读取一个对象。由于一个类的对象包含多种信

息,为了保证从对象流中能够读取到正确的对象,因此要求所有写入对象流的对象都必须是序列化的对象。一个类如果实现了Serializable 接口,那么这个类的对象就是序列化的对象。Serializable 接口没有方法,实现该接口的类不需要实现额外的方法。 示例:课本例10.4 5. 文件字符输入输出流FileReader/FileWriter和字符缓冲输入输出流 BufferedReader/BufferedWriter 知识点解析:文件字符输入输出流类与文件字节输入输出流类功能类似,但处理的基本单位是字符。字符缓冲输入输出流类用来对字符流进行成批的处理。 示例:课本例10.5 6. 文件类File 知识点解析: 文件类主要用来保存文件或目录的各种属性, 包括文件名、文件长度、最后修改时间、是否可读等;文件类还有以下功能:提供获得当前文件的路径名, 判断指定文件是否存在, 获得当前目录中所有文件列表, 创建文件、删除文件、创建目录、删除目录等操作的方法。 示例:课本例10.6 7. 文件过滤器接口FileFilter和FilenameFilter 知识点解析: 文件过滤器接口FileFilter和FilenameFilter用来实现对文件名字符串的过滤。两个接口中都声明accept()方法来实现过滤操作。 示例:课本例10.7 8. 随机文件类RandomAccessFile 知识点解析:随机文件类用于进行随意位置、任意类型的文件访问,并且在文件的读取方式中支持文件的任意读取而不只是顺序读取。 示例:课本例10.8 四、设计题(以下题目1、2题必做,第3题选做) 1. 利用文件字节输入输出流和数据字节输入输出流,将"九九乘法表"写入整数类型文件,并输出显示。 2. 将Java的关键字保存在一个文本文件中,判断一个字符串是否为Java的关键字。 3. 使用文件字节输入/输出流,合并两个指定文件;当文件中的数据已排序时,合并后的数据也要求是已排序的。

java实验11 输入输出流 - 答案

实验输入输出流 一、实验目的 1、掌握文件字节流的用法; 2、掌握文件字符流的用法; 3、掌握缓冲流的用法; 二、实验内容与步骤 1、编写程序,实现将诗句写入c:\小池.txt文件中,然后再从该文件中读出并打印输出。宋诗《小池》 作者:杨万里 泉眼无声惜细流, 树荫照水弄轻柔。 小荷才露尖尖角, 早有蜻蜓立上头。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class PoemWrite { public static void main(String[] args) { Scanner reader=new Scanner(System.in); String s; try{ FileWriter outOne=new FileWriter("c:\\小池.txt"); BufferedWriter outTwo=new BufferedWriter(outOne); while(!(s=reader.nextLine()).equals("0")){ outTwo.write(s); outTwo.newLine(); } outTwo.flush(); outTwo.close(); outOne.close(); FileReader inOne=new FileReader("c:\\小池.txt"); BufferedReader inTwo=new BufferedReader(inOne); while((s=inTwo.readLine())!=null){

实验7 输入输出流

实验七字符串和日期类 一、实验目的:掌握字符输入、输出流用法。 二、实验要求: 1.按如下描述,编程实现: 现在有如下格式的成绩单(文本格式)score.txt: 姓名:张三,数学72分,物理67分,英语70分。 姓名:李四,数学92分,物理98分,英语88分。 姓名:王五,数学68分,物理80分,英语77分。 要求按行读取成绩单,并在该行的末尾加上该同学的总成绩,然后再将该行写入到一个名字为scoreAnalysis.txt的文本中。 提示:通过BufferedReader和BufferedWriter实现读写文本文件; 通过Scanner对象分析出字符串中的数据。 2.分析程序的输出结果: import java.io.*; public class E { public static void main(String args[]) { try{ FileOutputStream out=new FileOutputSteam(“hello.txt”); FileInputStream in=new FileInputStream(“hello.txt”); byte content[]=”ABCDEFG”.getBytes(); StringBuffer bufferOne=new StringBuffer(); StringBuffer bufferTwo=new StringBuffer(); int m=-1; byte tom[]=new byte[3]; out.write(content); out.close(); while((m=in.read(tom,0,3))!=-1){ String s1=new String(tom,0,m); bufferOne.append(s1); String s2=new String(tom,0,3); bufferTwo.append(s2); } in.close(); System.out.println(bufferOne); System.out.println(bufferTwo); } catch(IOException e){} } }

输入输出流

第十章 输入/输出流
程序在运行时通常要和外部进行交互, 即从外部读取数据或向外部设备发送数据, 这就 是所谓的输入/输出(Input/Output)。 数据可以来自或者发往文件、 内存、 另一个程序或网络。 数据也可有不同的格式,例如可以是各种编码(ASCII 码或 Unicode 码等)的字符串、图像、 声音或对象等等。 Java 语言使用抽象概念——流来描述程序与数据发送或接收者之间的数据 通道。使用输入/输出流,程序员可以方便灵活和安全地实现输入输出功能。
§10.1 输入/输出基本概念
10.1.1 外部设备与文件
我们可以从不同角度对外部设备进行分类。 按照外部设备的工作特性, 我们可将外部设 备分为两类:存储设备和输入/输出设备。 存储设备用于存储信息,包括硬盘、软盘、磁带、光盘等。程序可将数据写入到这些设 备上,也可从这些设备读出数据,数据通常组织为文件形式。这类设备上存储的数据在物理 上往往是按字符块组织的,因而又将它们称为块设备。 输入/输出设备又可分为输入设备和输出设备。 输入设备是计算机用于接受外界信息的 设备,诸如键盘、鼠标、扫描仪等均为输入设备;输出设备是将计算机处理完毕的数据送往 外界的设备,诸如显示器、打印机、绘图仪等均为输出设备。由于这两类设备上的数据往往 是以字符为单位组织的,所以又称它们为字符设备。 计算机程序要与外界进行交互就必须使用相应的机制与输入/输出设备打交道。 程序的 输入是指从输入设备接收数据,程序的输出是指将数据传递给外部设备。 早期的高级程序设计语言对特定的外部设备提供特定的输入/输出操作, 这导致设计出 来的程序代码可移植性很差。后来引入了文件(file)的概念,在程序中不仅可以声明文件 并将文件作为输入/输出的对象, 而且还可以在文件与某个外部设备之间建立关联, 将文件 作为输入设备与输出设备的抽象描述。 目前文件已成为高级程序设计语言输入/输出机制的 基本概念。 一个文件必须有一个由用户命名的唯一名字。 文件可用于存储程序和数据, 还可用于提 高程序的设备无关性, 所谓设备无关性不仅指程序要独立于同类设备的具体台号, 而且还要 独立于设备的类型。 当我们的程序向屏幕或打印机输出时, 不必考虑使用的是哪一种型号的 显示器或打印机。 在操作系统中, 输入/输出设备被视作一种特殊的文件, 这类文件的名字是由操作系统 预先规定好的。例如在 MS-DOS 中显示器被命名为 CON 的文件(控制台终端 console 的缩 写) 、打印机被命名为 PRN 的文件(printer 的缩写) 。这样,程序的输入/输出操作采用了 与文件统一的方式,而不用理会实际的物理设备是什么。
10.1.2 文件的基本概念
Java 语言将文件看作是字节的序列, 即由一个个字节的数据顺序组成。 例如我们要将一 个班全体学生的基本资料存放在一个文件中, 文件中的数据并不是由学生记录组成的, 而是 由一个个字节组成的。 如何将文件中的这些字节组织为记录是由程序完成的, 文件本身并没 有划定任何边界。因而这种文件又称为流式文件(stream file) 。 (1)文本文件与二进制文件 根据文件中数据的组织形式, 可将文件分为文本文件和二进制文件两类。 文本文件存放 的是 ASCII 码(或其他编码的)字符,使用 Windows 操作系统的记事本打开可正确查看其
-1-

最新c++课件第十三章 输入输出流(1)

c++课件第十三章输入输出流(1)

第13章输入输出流 13.1 C++的输入和输出 13.1.1输入输出的含义 (1)对系统指定的标准设备进行输入和输出。 (2)以外存磁盘文件为对象进行输入和输出。 (3)对内存指定的空间进行输入和输出。 13.1.2 C++的I/O对C的发展——类型安全和可扩展性13.1.3 C++的输入输出流 1. iostream类库中有关的类 图13.1

图13.2 图13.3 2. 与iostream类库有关的头文件 iostream fstream strstream stdiostream iomanip 3. 在iostream头文件中定义的流对象 4. 在iostream头文件中重载运算符 ostream operator << (char *); //用于向输出流插入一个字符串 cout<<"C++"; 相当于 cout.operator<<("C++"); 对于自己的类,可用11章的方法进行重载。13.2标准输出流

13.2.1 cout,cerr和clog流 1.cout流对象 (1)cout流是流向显示器的数据。 (2)输出基本类型数据时,可以不考虑数据的类型是什么。 (3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区 是否已满,都立即输出流中的所有数据,然后插入一 个换行符,并刷新流(清空缓冲区)。 2.cerr流对象 cerr流是标准错误流。cerr流被指定与显示器关联。cout 流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。 例13.1 解一元二次方程ax2+bx+c=0 #include #include using namespace std; void main() { float a,b,c,disc; cout<<"please input a,b,c:"; cin>>a>>b>>c; if (a==0) cerr<<"a is equal to zero,error!"<

发学生第7次JAVA测试题第10章输入输出流内容20101211

第10章异常测试题2010-12-11 一、选择题 1.假设文件中的信息为abcd,下面代码执行的结果是什么: public static void main(String[]args)throws IOException{ FileInputStream fis=new FileInputStream("a.txt"); int data=fis.read(); System.out.println(data); fis.close();//a的ASCII码为97,A的为65 } A.97 B.a C.-1 D.编译出错 E.运行出错 2.假设文件中的信息为abcd,下面代码执行的结果是什么: public static void main(String[]args)throws Exception{ FileInputStream fis=new FileInputStream("a.txt"); int data=fis.readInt(); System.out.println(data); fis.close(); } A.97 B.a C.-1 D.编译出错 E.运行出错 3.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ //TODO Auto-generated method stub FileOutputStream fos=new FileOutputStream("a.txt"); fos.write Int(97); fos.close(); } A.文件中写入97 B.文件中写入a C.文件中写入-1 D.编译出错 E.运行出错 4.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ FileOutputStream fos=new FileOutputStream("a.txt"); fos.write(97); } A.文件中写入97 B.文件中写入a C.文件中写入-1 D.编译出错 E.运行出错 5.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ BufferedOutputStream fos=new BufferedOutputStream("a.txt"); fos.write(97);

第10章 能量输入和能量输出

第十章能量输入和能量输出Energy in and energy out 10.1 可再生能源Renewable energy 学习目标:Learning Objectives: 什么是可再生能源和不可再生能源? 哪些能源是可再生的? 太阳在为我们提供能源中,所起到的作用是什么? 参考大纲:3.2.2A 全球都在鼓励利用可再生能源来满足日趋增长的能源需求。而不发达国家从经济角度考虑,发展使用可再生能源的速度较慢,因为他们通常拥有大量未开采的煤、石油和天然气。而使用这些能源来满足一个快速发展的经济体相对大量的能源需求,其成本更低,而且技术需求也更低。 大多数能源——可再生能源和不可再生能源,都可以追溯到太阳,那么,为什么使用一种能源优于使用另一种能源呢?因为依赖含碳的不可再生能源会产生一些严重的问题: ?不可再生能源最终将会耗竭。 ?直接使用不可再生能源会增加输入到地球及其大气的能量。 ?使用不可再生能源产生的副产品会进一步加速全球变暖。 不可再生能源Non-renewable resources 不可再生能源包括石油、天然气和煤,由腐烂的生物体形成。石油和天然气来自百万年前堆积在海底的浮游生物和细菌的分解,而煤来自陆地上植物(如树木)的分解。生物体和植物生长所需的能量来自于阳光:植物通过光合作用吸收阳光,而植物反过来为生物体提供食物。由于煤和石油需要经过数百万年的分解才能形成,因此,一旦被消耗,就很难再生。 使用不可再生能源时,存储在地球物质中的太阳能会被释放。这些存储的能量会增加从太阳自然获得的能量。燃料燃烧时产生的气体(如二氧化碳)释放到大气中,会导致所谓的温室效应(在第11章中讲述)。 链接Link 本章的后面部分将对不同形式的能源及其使用形式作进一步阐释。 核能和地热能Nuclear and geothermal energy 核能来自于铀,而铀是一种不可再生资源。快速“增殖”反应堆会产生钚,而钚自身可用作燃料,从而增加了从核反应中可获得的能量。然而,即使是核资源,最终也可能会耗竭,因此核能是不可再生能源。 地球内部每往地心前进36米,温度会升高1K左右。因此,即使是几公里深度,温度也可能会超过250℃。地热能可用于直接为家庭和企业供热,也可用于驱动电力生产中的涡轮机和发电机(如图1所示)。地热能资源非常丰富,因此可以将其归类为可再生能源。

Java语言程序设计教程(第二版)翁 凯 肖少拥 王行言-第11章--Java的输入输出

第11章Java的输入输出 思考题与习题 一、概念思考题 1.简述流的概念与特点。 解答: Java的流是一个比文件所包含范围更广的概念。流是一个可被顺序访问的数据序列,是对计算机输入数据和输出数据的抽象,可以想象成数据像水一样流动,受到控制。 Java流的特点:数据可以是未加工的原始二进制数据,也可以经一定编码处理符合某种格式规定的特定数据,java中的数据流有字节流和字符流之分。 2.说明过滤流的概念及作用。 解答: 过滤流(包装流):使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流链接创建的。 过滤流的主要作用:在输入输出数据的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据的理解和编码转换。 3.说明stream家族与reader/writer家族之间的区别。 解答: stream家族操作的是字节数据,reader/writer家族操作的是字符数据。 4.描述java.io包中输入/输出流的类家族关系。 解答: 以字节为导向的stream 基类是InputStream和OutputSteam stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Outputstream)都包括两种类型: a)InputStream: 1)ByteArrayImputStream:把内存中的一个缓冲区作为InputStream使用2)StringButffetInputStream:把一个String对象作为InputStream 3)FilenputStream:把一个文件作为InputStream,实现对文件的读取操作4)PipedmputStream:实现了pipe的概念,主要在线程中使用 b)OutStream 1)ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2)FileCutputStream:把信息存入文件中 3)PipedOutputStream:实现了pipe的概念,主要在线程中使用 以Unicode字符为导向的stream包括下面几种类型: a)InputStream 1)CharArtayReader:与ByteArrayInputStream对应

第9章输入输出流上机

(一)使用文件输入输出流的应用程序 1.程序功能:将保存在本地机当前文件夹中的KY10_ 2.HTML 文本文件的内容在屏幕上显 示出来,然后将其另存为KY10_2.txt 文件。 2.编写KY10_2.java 程序文件,源代码如下 import java.io.*; public class KY5_4 { public static void main(String[] args) throws IOException { FileReader in=new FileReader("KY5_1.HTML");//建立文件输入流 BufferedReader bin=new BufferedReader(in);//建立缓冲输入流 FileWriter out=new FileWriter(" KY5_1.txt",true);//建立文件输出流 String str; while ((str=bin.readLine())!=null) { //将缓冲区内容通过循环方式逐行赋值给字符串str System.out.println(str);//在屏幕上显示字符串str out.write(str+"\n");//将字符串str 通过输出流写入KY5_1.txt 中 } in.close(); out.close(); } } 3.编译、运行程序 (二)使用随机文件类的应用程序 使用文件输入类FileReader 只能将文件内容全部读入。如果要选择读入文件的内容,可使用随机文件类RandomAccessFile。 1.程序功能:建立数据流,通过指针有选择的读入文件内容。 编写KY10_3.java 程序文件,源代码如下。 import java.io.*; class KY10_3 { public static void main(String args[]) { String str[]={"First line\n","Second line\n","Last line\n"}; try { RandomAccessFile rf=new RandomAccessFile("KY5_5.txt", "rw"); System.out.println("\n 文件指针位置为:"+rf.getFilePointer()); System.out.println("文件的长度为:"+rf.length()); rf.seek(rf.length()); System.out.println("文件指针现在的位置为:"+rf.getFilePointer()); for (int i=0; i<3; i++) rf.writeChars(str[i]); // 字符串转为字节串添加到文件末尾87 rf.seek(0);

第10章 输入输出流

第10章输入/输出流 10.1 选择题 1.下列类中( ac)不是输入输出流类iostream的派生类。 (a)fstream (b)ofstream (c)strstream (d)ostrstream 2.在下列选项中( d )是ostream类的对象。 (a)cin (b)cerr (c)clog (d)cout 3.read函数的功能是从输入流中读取( c )。 (a)一个字符 (b)当前字符 (c)一行字符 (d)指定若 干个字符 4.下列选项中,用于清除基数格式位设置以十六进制输出的语句是( b )。 (a) cout<>setf( ios::hex,ios::basefield); 5.下列格式控制符,在iostream.h中定义的是( a,d ),在iomanip.h 中定义的是( )。 (a)endl (b)setfill (c)setw (d)oct 6.下列串流类,在strstream.h中定义的是( b,d ),在sstream.h 中定义的是( )。 (a)istringstream (b)istrstream (c)ostringstream (d)ostrstream 7.包含类fstream定义的头文件是( a )。 (a)fstream.h (b)ofstream.h (c)ifstream.h (d)iostream.h 8.以写的方式打开文件” D:\file.dat”,错误的语句是(c )。 (a) ifstream infile( “D:\file.dat”, ios::in ); (b) ifstream infile( “D:\\file.dat”, ios::in); (c) ofstream infile( “D:\file.dat”, ios::out); (d) fstream infile( “D:\\file.dat”, ios::in|ios::out ); 9.假定已定义浮点型变量data,以二进制方式把data的值写入输出文 件流对象outfile中去,正确的语句是( c )。 (a) outfile.write(( float* ) &data , sizeof( float )); (b) outfile.write(( float* ) &data , data ); (c) outfile.write(( char* ) &data , sizeof( float )); (d) outfile.write(( char* ) &data , data ); 10.2 阅读下列程序,写出执行结果 1.#include < iostream.h >

输入输出流(例子)

例14.16 用友元函数实现复数类对象插入和提取运算符重载函数#include using namespace std; class Complex { double Real, Image; public: Complex(double r=0, double i=0) { Real=r; Image=i; } friend istream& operator>>(istream &, Complex &); friend ostream& operator<<(ostream &, Complex &); }; istream&operator>>(istream &in, Complex &c)友元函数{ 注意参数和返回值 in>>c.Real>>c.Image; return in; } ostream&operator<<(ostream &out, Complex &c)友元函数{ 注意参数和返回值 out<0) out<<'+'<

out<>c1>>c2; //解释为operator>>(operator>>(cin, c1), c2); cout< //输入 7 -3<回车> //输入 5+8i 7-3i 返回ppt讲稿 例14.22 编一个程序用于复制文本文件 #include #include

java实验七 输入输出流

实验七输入输出流 一.实验目的和要求 目的: 1、掌握使用输入输出流进行文件的读写操作。 要求: 1、实验报告给出内容1,2的填充代码以及内容3的全部源代码。 二.实验内容 1、按程序模板要求,将注释处替换为Java程序代码。实现文件加密。 2、按程序模板要求,将注释处替换为Java程序代码。给文件的内容添加行号. 3、串行化对象Student到本地文件,并在下一次运行程序时用来初始化。(选做)三.实验环境 硬件: (1)学生用微机 (2)多媒体实验教室 软件: (1)Windows XP中文操作系统 (2)JDK控制台 四.算法描述及实验步骤 实验步骤: 1、按程序模板要求,将注释处替换为Java程序代码 该程序将已存在的文本文件加密后存入另一个文本文件中。请按模板要求,将【代码1】~【代码6】替换为Java程序代码 SecretExample.java import java.io.*; public class SecretExample { public static void main(String args[ ]) { File fileOne=new File("hello.txt"), fileTwo=new File("hello.secret"); char b[]=new char[100]; try{ FileReader in=【代码1】 // 创建指向fileOne的字符输入流 FileWriter out=【代码2】 // 创建指向fileTwo字符输出流 int n=-1; while((n=in.read(b))!=-1) {

for(int i=0;i

相关文档
最新文档