admin 管理员组

文章数量: 887031


2024年1月10日发(作者:itemrack插件如何在游戏中调出来)

《Java基础入门》课后习题答案

第7章 IO(输入输出)

一、填空题

1、 Java中的I/O流,按照传输数据不同,可分为 :字节流、字符流

2.在Buffer与Channel交互时,数据从: Channel、读取到Buffer 中,或从Buffer入到 Channel 中。

3.用于将字节流转换为字符流的是:InputStreamReader、OutputStreamWriter

2、 NIO主要有三大核心部分: Buffer、Channel、Selector

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

二、判断题

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

2.对象序列化是指将一个Java 对象转换成一个 I/0 流中字节序列的过程。 对

l 是一个接口对象,它类似于传统的流对象。 对

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

5,BufferedInputStream 和 BufferedOutputStream 不是字节缓冲流。 错

三、选择题

1.下面选项中,哪些是标准输人输出流?(多选) (AB)

A. . Out tream Stream

类中以字符串形式返回文件绝对路径的方法是哪一项? (C)

A. getParent() B. getNamel) C. getAbsolutePathO D. getPath()

3.以下创建RandomAccessFile类实例对象的代码,哪些是正确的?(多选) (AB)

RandomAccessFile(new File("D:itcastdirltest. java"),”rw”);

RandomAccessFile("D:itcastdirltest. java","r");

C. new RandomAccessFile("D:");

D. new RandomAccessFile("D:","wr")

4.以下选项中,哪个流中使用了缓冲区技术? (A)

A. BufferedOutputStream B. FileInputStream

C. DataOutputStream D. FileReader

5.以下选项中,关于Java NIO 中Buffer类的常用说法正确的是哪一项?

(B)

方法会清除缓冲区数据,并将position 设置为 设置为 capacity O

()方法先将 limit 设置为当前 position 位置,然后再将 pson设置为0

()方法用于设置 Buffer 的标记(mark),其能在 0 与 limi 之间做标记

()方法将 position 设置为 0,并设置 mark 标记

四、简答题

1、简述 I/O 流的概念。

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

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 和 iter 分别进行拷贝。(2)使用字节流拷贝时,定义一个 1024 长度的字节数组作为缓冲区,使用字符流拷贝。用 BufferedReader 和 BufferedWriter 包装流进行包装。

2.某人在玩游戏的时候输人密码123456 后成功进入游戏(输错5 次则被强行退出)。要求用程序实现密码验证的过程。要求如下:

以将其删除 (1) 使用 Sysytem. in 包装为字符流读取键盘输入。

(2) BufferedResder 对字符流进行包装。调用 ButferedReuder 的 readli方读取一行。

(3在for循环中判新输人的码是为123456如果是则打印”你人

源。并退出循环,否则继续循环读取键盘输人。

(4) 当循环完毕,密码还不正确,打印“密码错误,结来游戏”并调用.....结束游戏。

参考答案

import .*;

public class Test01 {

public static void main(String[] args) throws Exception {

// 字节流拷贝

FileInputStream in = new FileInputStream("E:/");

FileOutputStream out = new FileOutputStream("E:/");

byte[] buf = new byte[1024];

int len;

while ((len = (buf)) != -1) {

(buf, 0, len);

}

();

();

// 字符流拷贝

BufferedReader bf = new BufferedReader(new FileReader("E:/"));

BufferedWriter bw = new BufferedWriter(new

FileWriter("E:/"));

String str;

while ((str = ne()) != null) {

(str);

e();

}

();

();

}

}

2、参考答案

import .*;

public class Test02 {

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new

InputStreamReader());

String password = "";

boolean b = false;

for (int i = 0; i < 5; i++) {

}

n("请输入密码:");

password = ne();

if (("123456")) {

n("恭喜你进入游戏");

b = true;

break;

}

}

if (!b) {

n("密码错误,游戏结束");

(0);

}

}


本文标签: 字节 字符 文件