《Java基础入门第2版》--黑马程序员 课后答案及其详解 第7章 I/O流

一、填空题

1、	字节流、字符流
2、	Channel、Buffer
3、	InputStreamReader、OutputStreamWriter
4、	Buffer、Channel、Selector
5、RandomAccesseFile

二、判断题

1、	错  2、对   3、对  4、对  5、错

三、选择题

1、AB   2、C   3、AB    4、A  5、A

四、简答题

1、Java程序通过I/O流来完成输入和输出,流是输入或输出信息的抽象。流通过Java的输入/输出系统与外设连接进行数据通信。流是抽象的对象,具体实现代码在java.io包中。

2、字节流的两个基类是InputStream和OutputStream,字符流的两个基类是Reader和Writer,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;Reader和Writer类是专门处理16位字节的字符流类。

3、Java中的NIO是为替代传统标准的I/O而出现的。与标准的IO相比,Java NIO提供了一种与I/O不同的工作方式。NIO采用内存映射文件的方式来处理输入/输出,它将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了。
在标准IO中,使用的是字节流和字符流,而在NIO中,使用的是通道(Channel)和缓冲区(Buffer)。数据总是从通道读入缓冲区,或从缓冲区写入通道。
NIO主要有三大核心部分:Buffer、Channel和Selector。其中Buffer可以被看成是一个容器,其本质是一个数组缓冲区,读入或写出到Channel中的所有对象都会先放在Buffer中;Channel是对传统的输入/输出的模拟,在NIO中,所有的数据都需要通过通道流的形式传输;Selector(选择器)用于监听多个通道的事件(例如:连接打开、数据到达等),主要用于多线程处理。

五、编程题

1.import java.io.*;
public class Test01 {
	public static void main(String[] args) throws Exception {
		// 字节流拷贝
		FileInputStream in = new FileInputStream("E:/src.txt");
		FileOutputStream out = new FileOutputStream("E:/des1.txt");
		byte[] buf = new byte[1024];
		int len;
		while ((len = in.read(buf)) != -1) {
			out.write(buf, 0, len);
		}
		in.close();
		out.close();
		// 字符流拷贝
		BufferedReader bf = new BufferedReader(new FileReader("E:/src.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("E:/des2.txt"));
		String str;
		while ((str = bf.readLine()) != null) {
			bw.write(str);
			bw.newLine();
		}
		bf.close();
		bw.close();
	}
}
2.import java.io.*;
public class Test02 {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String password = "";
		boolean b = false;
		for (int i = 0; i < 5; i++) {
			System.out.println("请输入密码:");
			password = br.readLine();
			if (password.equals("123456")) {
				System.out.println("恭喜你进入游戏");
				b = true;
				break;
			}
		}
		if (!b) {
			System.out.println("密码错误,游戏结束");
			System.exit(0);
		}
	}
}

六、原题及其解析

一.填空题
1.Java中的I/O流,按照传输数据不同,可分为( )和( )。字节流 字符流

2.在Buffer和Channel交互时,数据会从( )读取到( )中,或从Buffer写入到Channel中。Channel Buffer

3.用于将字节流转换为字符流的是( )和( )。InputStreamReader OutputStreamWriter

4.NIO主要有三大核心部分:( )、( )和( )。Buffer Channel Selector

5.Java中提供了一个类( ),它不但具有读写文件的功能,而且可以随机地从文件的任何位置开始执行读写数据的操作。RandomAccesseFile

二.判断题
1.如果一个File表示目录下有文件或者子目录,调用delete( )方法也可以将其删除。()错×

2.对象序列化是指讲一个Java对象转换成一个I/O流中字节序列的过程。()对√

3.Channel是一个接口对象,它类似于传统的流对象。()对√

4.InputStream类的close( )方法是用于关闭流并且释放流所占的系统资源。()对√

5.BufferedInputStream和BufferedOutputStream不是字节缓冲流。()错×

三.选择题
1.下面选项中,哪些是标准输入输出流?(多选)( ) AB
A.System.In B.System.Out C.InputStream D.OutputStream

2.File类中以字符串形式返回文件绝对路径的方法是哪一项?( ) C
A.getParent( ) B.getName( )
C.getAbsolutePath( ) D.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\dirl\test.java”);
D.new RandomAccessFile(“D:\itcast\dirl\test.java”,“wr”)

4.以下选项中,哪个流使用了缓冲区技术?( ) A
A.BufferOutputStream B.FileInputStream
C.DataOutputStream D.FileReader

5.以下选项中,关于Java NIO中Buffer类的常用说法正确的是哪一项?( )B
A.clear( )方法会清除缓冲区数据,并将position设置为0,limit设置为capacity
B.flip( )方法先将limit设置为当前position位置,然后再将position设置为0
C.mark( )方法用于设置Buffer的标记(mark),只能在0与limit之间做标记
D.rewind( )方法将position设置为0,并设置mark标记

四.简答题
1.简述I/O流的概念。
Java程序通过I/O流来完成输入和输出,流是输入或输出信息的抽象。流通过Java的输入/输出系统与外设连接进行数据通信。流是抽象的对象,具体实现代码在java.io包中。

2.简述字节流、字符流的区别。
字节流的两个基类是InputStream和OutputStream,字符流的两个基类是Reader和Writer,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;Reader和Writer类是专门处理16位字节的字符流类。

3.简要说明什么是NIO。
Java中的NIO是为替代传统标准的I/O而出现的。与标准的IO相比,Java NIO提供了一种与I/O不同的工作方式。NIO采用内存映射文件的方式来处理输入/输出,它将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了。
在标准IO中,使用的是字节流和字符流,而在NIO中,使用的是通道(Channel)和缓冲区(Buffer)。数据总是从通道读入缓冲区,或从缓冲区写入通道。
NIO主要有三大核心部分:Buffer、Channel和Selector。其中Buffer可以被看成是一个容器,其本质是一个数组缓冲区,读入或写出到Channel中的所有对象都会先放在Buffer中;Channel是对传统的输入/输出的模拟,在NIO中,所有的数据都需要通过通道流的形式传输;Selector(选择器)用于监听多个通道的事件(例如:连接打开、数据到达等),主要用于多线程处理。


五.编程题
1.编写一个程序,分别使用字节流和字符流拷贝一个文本文件。要求如下:
(1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝。
(2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝,使用BufferedReader和BufferedWriter包装流进行包装。

import java.io.*;
public class Test01 {
	public static void main(String[] args) throws Exception {
		// 字节流拷贝
		FileInputStream in = new FileInputStream("E:/src.txt");
		FileOutputStream out = new FileOutputStream("E:/des1.txt");
		byte[] buf = new byte[1024];
		int len;
		while ((len = in.read(buf)) != -1) {
			out.write(buf, 0, len);
		}
		in.close();
		out.close();
		// 字符流拷贝
		BufferedReader bf = new BufferedReader(new FileReader("E:/src.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("E:/des2.txt"));
		String str;
		while ((str = bf.readLine()) != null) {
			bw.write(str);
			bw.newLine();
		}
		bf.close();
		bw.close();
	}
}

2.某人在玩游戏的时候输入密码123456后成功进入游戏(输错5次则被强行退出),要求用程序实现密码验证的过程。要求如下:
(1)使用System.in包装为字符流读取键盘输入。
(2)BufferedReader对字符流进行包装。调用BufferedReader的readLine( )方法每次读取一行。
(3)在for循环中判断输入的密码是否为123456,如果是则打印"恭喜你进入游戏",并跳出循环,否则继续循环读取键盘输入。
(4)当循环完毕,密码还不正确,则打印"密码错误,结束游戏",并调用System.exit(0)方法结束程序。

import java.io.*;
public class Test02 {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String password = "";
		boolean b = false;
		for (int i = 0; i < 5; i++) {
			System.out.println("请输入密码:");
			password = br.readLine();
			if (password.equals("123456")) {
				System.out.println("恭喜你进入游戏");
				b = true;
				break;
			}
		}
		if (!b) {
			System.out.println("密码错误,游戏结束");
			System.exit(0);
		}
	}
}
  • 24
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香鱼嫩虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值