全部学科
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
单选题

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

A

工厂模式

B

装饰器模式

C

单例模式

D

观察者模式

2
单选题

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

A

复制图片文件

B

读取文本文件内容

C

下载视频文件

D

复制 ZIP 压缩包

3
单选题

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

A

BufferedInputStream

B

BufferedReader

C

InputStreamReader

D

FileReader

4
单选题

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

A

Cloneable

B

Serializable

C

Externalizable

D

Comparable

5
单选题

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

A

Channel

B

Buffer

C

Selector

D

Pipe

6
单选题

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

A

FileChannel.lock()

B

FileLock.acquire()

C

Files.lock()

D

RandomAccessFile.lock()

7
单选题

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

A

FileChannel

B

AsynchronousFileChannel

C

AsyncFileChannel

D

NioFileChannel

8
判断题

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

A

B

9
判断题

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

A

B

10
多选题

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

A

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

B

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

C

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

D

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

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
填空题

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

18
判断题

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

A

B

19
多选题

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

A

OP_READ - 读就绪

B

OP_WRITE - 写就绪

C

OP_CONNECT - 连接就绪

D

OP_ACCEPT - 接收就绪

20
多选题

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

A

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

B

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

C

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

D

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

下一个专题 → JVM基础与内存模型专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库