全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 20 道配套习题

IO与NIO深入专题

专题说明

本专题系统讲解Java IO与NIO的核心知识点,IO是Java传统输入输出机制,NIO是Java 1.4引入的新IO模型,AIO是Java 7引入的异步IO,掌握它们是处理文件和网络数据的基础。

学习目标

  1. 理解Java IO流的体系结构与装饰器模式
  2. 掌握字节流与字符流的区别与选择
  3. 熟练使用缓冲流和转换流提高效率
  4. 理解对象序列化机制与transient关键字
  5. 掌握NIO三大核心组件Channel、Buffer、Selector
  6. 理解NIO非阻塞模式的工作原理
  7. 掌握文件锁、内存映射文件的使用
  8. 了解异步IO(AIO)的使用方式

学习内容

本专题涵盖十大核心知识点:

知识点核心内容
Java IO流体系四大基类、装饰器模式、节点流与处理流
字节流与字符流InputStream/OutputStream、Reader/Writer
缓冲流与转换流BufferedReader/BufferedWriter、转换流
对象序列化Serializable、transient、serialVersionUID
NIO核心组件Channel、Buffer、Selector
NIO非阻塞模式configureBlocking、SelectionKey
文件锁与内存映射FileLock、MappedByteBuffer
Path与Files APINIO.2文件操作、Path创建
异步IO(AIO)AsynchronousChannel、Future/CompletionHandler
IO与NIO性能对比面向流vs面向缓冲、阻塞vs非阻塞

学习建议

  1. 理解模型差异:IO面向流、阻塞式;NIO面向缓冲、非阻塞式;AIO异步回调式
  2. 动手实践:Buffer的flip/clear方法是难点,建议写代码验证
  3. 场景选择:少量连接用传统IO,高并发用NIO,简化编码用AIO
  4. 注意资源释放:IO流和Channel都需要正确关闭,建议使用try-with-resources

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

ByteBuffer 是 NIO 中最常用的 Buffer 类型,它提供了直接字节缓冲区(Direct Buffer)和非直接字节缓冲区(Heap Buffer)两种实现。

A

B

2

FileChannel.lock() 获取的是独占锁,tryLock() 获取的是共享锁。

A

B

3

节点流直接连接数据源(如文件、网络、内存),处理流包装节点流提供额外功能(如缓冲、编码转换、对象序列化)。

A

B

单选题
4

Java IO 流体系的设计模式是什么?

A

工厂模式

B

装饰器模式

C

单例模式

D

观察者模式

5

以下哪种场景应该优先使用字符流?

A

复制图片文件

B

读取文本文件内容

C

下载视频文件

D

复制 ZIP 压缩包

6

以下哪个类可以为字符输入流提供缓冲功能?

A

BufferedInputStream

B

BufferedReader

C

InputStreamReader

D

FileReader

7

Java 对象要实现序列化,必须实现哪个接口?

A

Cloneable

B

Serializable

C

Externalizable

D

Comparable

8

NIO 中用于存储读写数据的核心组件是?

A

Channel

B

Buffer

C

Selector

D

Pipe

9

Java NIO 中获取文件锁的方法是?

A

FileChannel.lock()

B

FileLock.acquire()

C

Files.lock()

D

RandomAccessFile.lock()

10

Java AIO(异步 IO)中,异步文件操作的类是?

A

FileChannel

B

AsynchronousFileChannel

C

AsyncFileChannel

D

NioFileChannel

多选题
11

以下关于转换流的说法,正确的有?

A

InputStreamReader 将字节流转换为字符流

B

OutputStreamWriter 将字符流转换为字节流

C

转换流可以指定字符编码

D

FileReader 内部使用了 InputStreamReader

12

关于 NIO 核心组件,以下说法正确的有?

A

Channel 是双向的,可以同时读写

B

Buffer 提供了 flip() 方法切换读写模式

C

Selector 用于实现多路复用,一个线程管理多个 Channel

D

FileChannel 可以设置为非阻塞模式

13

关于 NIO 非阻塞模式的特点,以下说法正确的有?

A

非阻塞模式下,read/write 操作可能返回 0

B

非阻塞模式需要配合 Selector 才能高效工作

C

非阻塞模式适合处理大量并发连接

D

非阻塞模式比阻塞模式编程更简单

14

关于内存映射文件(Memory-Mapped File),以下说法正确的有?

A

FileChannel.map() 创建内存映射文件

B

内存映射文件直接操作内存,无需 read/write 调用

C

内存映射文件适合处理大文件

D

内存映射文件修改会立即写入磁盘

15

关于 Files 工具类,以下说法正确的有?

A

Files.readAllLines() 读取文件所有行到 List

B

Files.write() 可以一次性写入字节或字符串

C

Files.copy() 可以复制文件或目录

D

Files.walk() 可以递归遍历目录树

16

关于 IO 与 NIO 的区别,以下说法正确的有?

A

IO 基于流,NIO 基于缓冲区

B

IO 是阻塞模式,NIO 支持非阻塞模式

C

NIO 可以用单线程管理多个连接

D

NIO 的编程复杂度比 IO 低

17

关于字节流与字符流的区别,以下说法正确的有?

A

字节流处理单位是 8 位字节,字符流处理单位是 16 位字符

B

字节流不涉及编码转换,字符流会自动处理编码

C

InputStreamReader 是字节流到字符流的桥梁

D

字节流比字符流效率更高,应该优先使用

18

Selector 可以监控 Channel 的哪些就绪状态?

A

OP_READ - 读就绪

B

OP_WRITE - 写就绪

C

OP_CONNECT - 连接就绪

D

OP_ACCEPT - 接收就绪

19

关于 Buffer 的 flip()、clear()、compact() 方法,以下正确的有?

A

flip() 将 position 置 0,limit 置原 position,准备读取

B

clear() 将 position 置 0,limit 置 capacity,准备写入

C

compact() 将未读数据移到前面,position 置移动后位置,准备继续写入

D

三个方法都是用于切换读写模式

填空题
20

Buffer 有三个核心属性:____________表示缓冲区容量(最大存储量),____________表示当前操作位置,____________表示可操作数据边界。

参考答案
1.正确 2.错误 3.正确 4.B 5.B 6.B 7.B 8.B 9.A 10.B 11.A;B;C;D 12.A;B;C 13.A;B;C 14.A;B;C 15.A;B;C;D 16.A;B;C 17.A;B;C 18.A;B;C;D 19.A;B;C;D 20.capacity;position;limit
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
下一个专题 → JVM基础与内存模型专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码