字符流和标准输入输出流
- 格式:pptx
- 大小:140.13 KB
- 文档页数:16
《Java基础入门》课后习题答案第7章IO(输入输出)一、填空题1、Java中的I/O流,按照传输数据不同,可分为:字节流、字符流2.在Buffer与Channel交互时,数据从:Channel、读取到Buffer 中,或从Buffer入到Channel 中。
3.用于将字节流转换为字符流的是:InputStreamReader、OutputStreamWriter2、NIO主要有三大核心部分:Buffer、Channel、Selector5、Java中提供了一个类:RandomAccesseFile,它不但具有读写文件的功能,而且可以随机地从文件的任何位置开始执行读写数据的操作。
二、判断题1. 如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。
错2.对象序列化是指将一个Java 对象转换成一个I/0 流中字节序列的过程。
对3.Channel 是一个接口对象,它类似于传统的流对象。
对4.InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。
对5,BufferedInputStream 和BufferedOutputStream 不是字节缓冲流。
错三、选择题1.下面选项中,哪些是标准输人输出流?(多选) (AB)A. System.InB.System. OutC.InputStreamD.OutputStream2.File类中以字符串形式返回文件绝对路径的方法是哪一项?(C)A. getParent()B. getNamel)C. getAbsolutePathOD. getPath()3.以下创建RandomAccessFile类实例对象的代码,哪些是正确的?(多选)(AB)A.new RandomAccessFile(new File("D:\\itcast\\dirl\test. java"),”rw”);B.new RandomAccessFile("D:\\itcast\\dirl\test. java","r");C. new RandomAccessFile("D:\\itcast\\dir1\\test.java");D. new RandomAccessFile("D:\\itcast\\dir1\\test.java","wr")4.以下选项中,哪个流中使用了缓冲区技术? (A)A. BufferedOutputStreamB. FileInputStreamC. DataOutputStreamD. FileReader5.以下选项中,关于Java NIO 中Buffer类的常用说法正确的是哪一项?(B)A.clearO方法会清除缓冲区数据,并将position 设置为0.limit 设置为capacity OB.fip()方法先将limit 设置为当前position 位置,然后再将pson设置为0C.mark()方法用于设置Buffer 的标记(mark),其能在0 与limi 之间做标记D.rewind()方法将position 设置为0,并设置mark 标记四、简答题1、简述I/O 流的概念。
字符流分类详细介绍和各种字符流类介绍与使⽤字符集1、字符流:字节流不能操作Unicode字符,由于Java采⽤16位的Unicode字符,即⼀个字符占16位,所以要使⽤基于字符的输⼊输出操作。
所以创造了字符流,以提供直接的字符输⼊输出的⽀持。
2、字符流类的层次结构:2.1、输⼊流的类层次结构:2.2、输出流的类层次结构3、字符流的顶层抽象类:Reader和Writer。
public abstract class Reader extends Object implements Readable, Closeable⽤于读取字符流的抽象类。
⼦类必须实现的⽅法只有 read(char[], int, int) 和 close()。
但是,多数⼦类将重写此处定义的⼀些⽅法,以提供更⾼的效率和/或其他功能。
public abstract class Writer extends Object implements Appendable, Closeable, Flushable写⼊字符流的抽象类。
⼦类必须实现的⽅法仅有 write(char[], int, int)、flush() 和 close()。
但是,多数⼦类将重写此处定义的⼀些⽅法,以提供更⾼的效率和/或其他功能。
4、java.io包中⽤于处理字符流的基本类InputStreamReader和OutputStreamWriter:InputStreamReader是字节流通向字符流的桥梁:它使⽤指定的 charset 读取字节并将其解码为字符。
它使⽤的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
OutputStreamWriter 是字符流通向字节流的桥梁:可使⽤指定的 charset 将要写⼊流中的字符编码成字节。
它使⽤的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
4.1、InputStreamReader主要构造⽅法:InputStreamReader(InputStream in) 创建⼀个使⽤默认字符集的 InputStreamReader。
输入输出流的相关简介系别:计算机技术与信息管理系班级:09软件技术姓名:徐燕学号:09207745目录一.Java输入输出流详解 (3)1.什么是流: (3)2、流的分类 (3)2.1字节流 (3)2.2.字符流 (4)2.3.对象流 (4)4.字节流与字符流的区别: (4)二.流的层次结构 (5)1.InputStream类 (6)2.OutputStream类 (7)3.FileInputStream类 (7)4.FileOutputStream类 (8)5.File类 (8)6.从一个流构造另一个流 (9)7.BufferInputStream和bufferOutputStream (10)8.printstream (11)三.字符流的读取和写入 (11)1.BufferInputStream和bufferOutputStream (14)2.printstream (15)四.java的i/o输入输出类怎么分出是输入流还是输出流? (15)五.java中什么时候用输入流,什么时候用输出流? (16)六.JA V A输出输入流函数注意事项 (16)1. 处理概述: (17)2. 字节流: (17)2.1输入流: (17)2.2输出流: (18)3、字符流: (18)3.1. 字符流处理概述 (18)3.2. 字符流处理 (19)3.3流处理中的其它方法: (20)七.总结 (21)一.Java输入输出流详解stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。
在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:1.什么是流:流是一个抽象的概念。
当Java程序需要从数据源读取数据时,会开启一个到数据源的流。
数据源可以是文件,内存或者网络等。
同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。
IO操作手册1 IO API1.1 类文件输入流:FileReader BufferedReader字符流:输出流:FileWriter BufferedWriter PrintWriter输出流:FileOutputStream BufferedOutputStream PrintStream 字节流:DataOutputStream输入流:FileInputStream BufferedInputStream DataInputStream输入流:InputStreamReader字符字节通用流:输出流:OutputStreamWriter在数据流操作过程中通过缓冲区能大大提高I/O性能,采用数据缓冲区只需将输入与输出流用Buffered*封装一次即可1.2 类说明FileOutputStream 用于写入诸如图像、文件数据之类的原始字节的流FileInputStream 用于读取诸如图像、文件数据之类的原始字节流DataOutputStream写入java基本类型数据字节流(也可写入文件数据)readUTF方法用于读取用UTF-8 修改版格式编码的字节流DataInputStream 读写由DataOutputStream写入的java的基本类型的方法,如readInt,readLong。
writeUTF方法采用平台无关方式的UTF-8 修改版编码写入字节流Buffered*能够在内存里建立一个缓冲数据区,当写文件的时候,能起到缓冲的作用,并且可以自定缓冲区大小,BufferedOutputStream(OutputStream out, int size) InputStreamReader 是从字节流到字符流的桥梁:它读入字节,并根据指定字符编码方式,将之转换为字符流显示。
使用的编码方式可能由名称指定,如InputStreamReader(InputStream in, String charsetName),charsetName就是用于指定字符编码方式的OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的编码方式将要向其写入的字符编码为字节。
拓展知识9-1 标准I/O设备文件和流C程序中经常有大量对文件的输入输出操作,它构成了程序的重要部分,因而C语言提供了很多输入输出的函数,用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件系统(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件系统(也称非标准文件(流)输入输出(I/O)系统)。
我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf,printf 等等,这些通过控制台(键盘、显示器等)进行I/O的操作,可以看作标准文件输入输出系统的一些特例。
任何C程序执行时,系统都定义了5个标准设备文件供使用。
系统自动打开的5个标准设备文件为:键盘(标准输入)stdin 0显示器(标准输出)stdout 1显示器(标准错误)stderr 2串行口(标准辅助)stdoux 3打印机(标准打印)stdprn 4在C中可将数据的输入输出看作是数据的流入和流出,这样不管是普通(磁盘)文件或者是物理设备(打印机、显示器、键盘等),都可看作一种流的源和目的,视他们为同一种东西,而不管其具体的物理结构,即对他们的操作,就是数据的流入和流出。
这种把数据的输入输出操作,抽象化为一种流,而不管它的具体结构的方法很有利于编程,而涉及流的输入输出操作函数可用于各种对象,与其具体的实体无关,即具有通用性。
在C语言中流可分为两大类,即文本流(text stream)和二进制流(binary stream)。
所谓文本流是指在流中流动的数据是以字符形式出现。
在文本流中,'\n'被换成回车CR和换行LF的代码0DH和0AH。
而当输出时,则0DH和0AH被换成'\n'。
二进制流是指流动的是二进制数字序列,若流中有字符,则用一个字节的二进制ASCII码表示,若是数字,则用一个字节的二进制数表示。
在流入流出时,对\n符号不进行变换。
【示例】2001这个数,在文本流中用其ASCII码表示为:50 48 48 49共占4字节。
流机制是JAVA及C++中的一个重要的机制,通过流能使我们能自由地控制包括文件,内存,IO设备等等中的数据的流向。
如:可以从文件输入流中获取数据,经处理后再通过网络输出流把数据输出到网络设备上;或利用对像输出流把一个程序中的对象输出到一个格式流文件中,并通过网络流对象将其输出到远程机器上,然后在远程机器上利用对象输入流将对象还原。
像这些机制是别的高级语言所不能比拟的。
但要掌握好这些流对象,流的概念是很重要的。
流是一串连续不继的数据的集合,就像水管一里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。
数据写入程序可以是一段一段地向数据流管道中写入数据,这些数据段会按先向顺序形成一个长的数据流。
对数据的读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。
不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。
在JAVA中的流按流动方向可以分为输入流及输出流两种,按流的处理位置可分为节点流和包装流。
输入流,输出流是以程序为参考点来说的,所谓的输入流就是程序从中获取数据的流,输出流就是程序要其写数据的流。
在输入流的一边是程序,而另一边就是流的数据源。
而输出流的一边则目标,一边就是程序。
其实流可以想像成是一条长河,在上游有一水库提供水源,河边住着一户人,随时都可以从河边取到水,同时,这户人也可以把一些废水倒进河里,使得废水可以流进大海。
这里所提到河就是一个数据的流动通道,而水库就好比是计算机上的一切数据源,包括磁盘文件,内存,IO设备,键盘等等,JAVA提供了非常完善的输入流类来把这些数据源挂接到流上使得程序能从这些输入流中获取所需的数据。
河边上的用户就是程序,它能随时随地从流中取得数据,只要有数据源挂接到这个通道上可以。
而大海就是程序处理完数据后要流向的目的地,这些目的地包抱磁盘文件,内存,IO设备,显示器等,这些目的地只是相对程序来说的,它们也可能是别的进程的输入流。
Java输⼊输出流(⼀)——常⽤的输⼊输出流1.流的概念:在Java中,流是从源到⽬的地的字节的有序序列。
Java中有两种基本的流——输⼊流(InputStream)和输出流(OutputStream)。
根据流相对于程序的另⼀个端点的不同,分为节点流和过滤流。
(1)节点流:以特定源如磁盘⽂件、内存某区域或者线程之间的管道为端点的构造输⼊输出流,是⼀种基本的流。
(2)过滤流:以其他已经存在的流为端点构造的输⼊输出流。
根据流中的数据单位分为字节流和字符流。
(1)字节流:流中的数据是以8位字节为单位进⾏读写,以InputStream和OutputStream为基础类。
(2)字符流:流中的数据是以16为字符为单位进⾏读写,以Reader和Writer为基础类。
2.字节流InputStream和OutputStream是字节流的两个顶层⽗类,提供了输⼊流类和输出流类的通⽤API。
2.1 输⼊字节流InputStream基本⽅法:(1)基本读⽅法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)(2) 关闭流:void close()(3) 返回输⼊流中还有多少可读字节 int available()(4) 跳过指定字节 long skip(long n)(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()2.2 输出字符流OutputStream基本⽅法:(1)基本写⽅法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)(2) 关闭流:void close()(3)q强制输出:void flush()3.字符流:Reader和Writer是字符流的顶层⽗类,字符流能够处理Unicode字符集中的所有字符。
Java编程语言中的IO编程与实际应用在计算机编程中,IO(Input/Output)编程是必不可少的一部分,它涉及到计算机内部的输入输出操作。
Java编程语言也提供了一套完善的IO编程体系,可以更加方便地进行文件的读写和网络通信。
本文将就Java编程语言中的IO编程进行详细介绍,并结合实际应用讲解其具体用法。
I. Java IO编程体系Java的IO编程体系由四个流(stream)类别组成:字节流(byte streams)、字符流(character streams)、标准IO流(Standard I/O streams)以及对象流(Object streams)。
其中,字节流操作的是原始的8位数据,而字符流则操作Unicode字符。
标准IO流包括了Java系统所提供的三个流对象:System.in、System.out和System.err。
而对象流则用于对Java对象进行序列化和反序列化操作。
字节流由InputStream和OutputStream两个抽象类组成,它们可以用于读写字节数据,比如音频、视频、图像等二进制文件。
字符流由Reader和Writer两个抽象类组成,它们可以用于读写Unicode字符,比如文本文件和XML文件。
标准IO流则包括了System.in、System.out和System.err三个类,它们分别代表标准输入、标准输出和标准错误输出。
对象流则分别由ObjectInputStream和ObjectOutputStream两个类组成,它们可以用于序列化和反序列化Java对象。
通过对象流,我们可以将Java对象保存到磁盘中,也可以从磁盘中读取Java对象。
II. Java IO编程实例以下是一些Java IO编程的实例,这些实例主要包括了文件读写、网络通信以及序列化操作。
1. 文件读写Java IO编程可以使用字节流和字符流来读写文件。
下面的代码演示了如何使用字符流来读取文本文件:```javaFileReader reader = new FileReader("filename.txt");BufferedReader br = new BufferedReader(reader);String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();reader.close();```上述代码打开文件filename.txt,并逐行读取其中的文本内容,并输出到控制台上。
* 掌握:输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
* 理解:C++类库中的常用流类。
* 了解:C++的I/O对C的发展。
重点、难点◆输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
一、C++ 输入输出的含义以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。
从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。
C++的输入与输出包括以下3方面的内容:1、对系统指定的标准设备的输入和输出。
简称标准I/O。
(设备)2、以外存磁盘(或光盘)文件为对象进行输入和输出。
简称文件I/0。
(文件)3、对内存中指定的空间进行输入和输出。
简称串I/O。
(内存)C++采取不同的方法来实现以上3种输人输出。
为了实现数据的有效流动,C++系统提供了庞大的I/O类库,调用不同的类去实现不同的功能。
二、C++的I/O对C的发展—类型安全和可扩展性C语言中I/O存在问题:1、在C语言中,用prinff和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。
学过C语言的读者可以分析下面的用法:想用格式符%d输出一个整数,但不小心错用了它输出单精度变量和字符串,会出现什么情况?假定所用的系统int型占两个字节。
printf("%d",i);//i为整型变量,正确,输出i的值printf("%d",f);//f为单精度变量,输出变量中前两个字节的内容printf("%d","C++");//输出字符串"C++”的起始地址编译系统认为以上语句都是合法的,而不对数据类型的合法性进行检查,显然所得到的结果不是人们所期望的。
2、在用scanf输入时,有时出现的问题是很隐蔽的。
C++——输⼊、输出和⽂件⼀、C++输⼊和输出概述 1.1、流和缓冲区 C++程序把输⼊和输出看作字节流。
输⼊时,程序从输⼊流中抽取字节;输出时,程序将字节插⼊到输出流中。
对于⾯相⽂本的程序,每个字节代表⼀个字符,更通俗地说,字节可以构成字符或数值数据的⼆进制表⽰。
输⼊流中的字节可能来⾃键盘,也可能来⾃存储设备(如硬盘)或其他程序。
输出流中的字节可以流向屏幕、打印机、存储设备或其他程序。
流充当了程序和流源或流⽬标之间的桥梁。
这使得C++程序可以以相同的⽅式对待来⾃键盘的输⼊和来⾃⽂件的输⼊。
C++程序只检查字节流,⽽不需要知道字节来⾃何⽅。
同理,通过使⽤流,C++程序处理输出的⽅式将独⽴于其去向。
因此管理输⼊将包含两步: *将流与输⼊去向的程序关联起来。
*将流与⽂件连接起来。
换句话说,输⼊流需要两个连接,每端各⼀个。
⽂件端部连接提供了流的来源,程序端连接将流的流出部分转储到程序中(⽂件端连接可以是⽂件,也可以是设备)。
同样,对输出的管理包括将输出流连接到程序以及将输出⽬标与流关联起来。
通常,通过使⽤缓冲区可以更⾼效地处理输⼊和输出。
缓冲区是⽤作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储⼯具。
1.2、流、缓冲区和iostream⽂件 管理流和缓冲区的⼯作有点复杂,但iostream(以前为iostream.h)⽂件中包含⼀些专门设计⽤来实现、管理流和缓冲区的类。
C++98版本C++I/O定义了⼀些类模板,以⽀持char和wchar_t数据;C++11添加了char16_t和char32_t具体化。
通过使⽤typedef⼯具,C++使得这些模板char具体化能够模仿传统的⾮模板I/O实现。
下⾯是其中的⼀些类: *streambuf类为缓冲区提供了内存,并提供了⽤于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类⽅法; *ios_base类表⽰流的⼀般特征,如是否可读取、是⼆进制流还是⽂本流等; *ios类基于ios_base,其中包含了⼀个指向streambuf对象的指针成员; *ostream类是从ios类派⽣⽽来的,提供了输出⽅法; *istream类也是从ios类派⽣⽽来的,提供了输⼊⽅法; *iostream类是基于istream和ostream类的,因此继承了输⼊⽅法和输出⽅法。
C++中输⼊输出流及⽂件流操作总结本⽂实例为⼤家分享了C++中输⼊输出流及⽂件流操作笔记,供⼤家参考,具体内容如下1、流的控制iomanip 在使⽤格式化I/O时应包含此头⽂件。
stdiostream ⽤于混合使⽤C和C + +的I/O机制时,例如想将C程序转变为C++程序2、类继承关系ios是抽象基类,由它派⽣出istream类和ostream类, iostream类⽀持输⼊输出操作,iostream类是从istream类和ostream类通过多重继承⽽派⽣的类类ifstream继承了类istream,类ofstream继承了类ostream,类fstream继承了类iostreamiostream头⽂件中4种流对象cout补充1、⽤“cout<<”输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型并根据其类型选择调⽤与之匹配的运算符重载函数。
这个过程都是⾃动的,⽤户不必⼲预。
如果在C语⾔中⽤prinf函数输出不同类型的数据,必须分别指定相应的输出格式符,⼗分⿇烦,⽽且容易出错2、cout流在内存中对应开辟了⼀个缓冲区,⽤来存放流中的数据,当向cout流插⼈⼀个endl时,不论缓冲区是否已满,都⽴即输出流中所有数据,然后插⼊⼀个换⾏符,并刷新流(清空缓冲区)。
注意如果插⼈⼀个换⾏符”\n“(如cout<<a<<"\n"),则只输出和换⾏,⽽不刷新cout 流(但并不是所有编译系统都体现出这⼀区别)。
3、在iostream中只对"<<"和">>"运算符⽤于标准类型数据的输⼊输出进⾏了重载,但未对⽤户声明的类型数据的输⼊输出进⾏重载。
如果⽤户声明了新的类型,并希望⽤"<<"和">>"运算符对其进⾏输⼊输出,按照重运算符重载来做。