面试题 IO以及NIO

1.说说Java 中 IO 流?

在Java中,IO(Input/Output)流用于处理输入和输出。Java的IO流分为字节流和字符流两种类型,用于处理不同类型的数据。

Java的IO流由以下几个重要的类和接口组成:

1. InputStream和OutputStream:这是字节流的基础抽象类。InputStream用于读取字节数据,OutputStream用于写入字节数据。

2. Reader和Writer:这是字符流的基础抽象类。Reader用于读取字符数据,Writer用于写入字符数据。

3. FileInputStream和FileOutputStream:这是在文件中进行读写的流类。FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件中写入字节数据。

4. FileReader和FileWriter:这是在文件中进行字符读写的流类。FileReader用于从文件中读取字符数据,FileWriter用于向文件中写入字符数据。

5. BufferedReader和BufferedWriter:这是缓冲字符流,用于提供缓冲功能,提高读写性能。

6. ByteArrayInputStream和ByteArrayOutputStream:这是内存中字节数组的流类。ByteArrayInputStream用于从字节数组中读取数据,ByteArrayOutputStream用于向字节数组中写入数据。

除了上述基本的IO流类和接口外,Java还提供了多种装饰器类,用于对现有的IO流进行功能增强,如使用缓冲区、实现数据转换、实现压缩和加密等。

Java的IO流提供了灵活、可扩展的方式来处理输入和输出,可用于文件操作、网络通信、数据解析等各种场景。在使用IO流进行读写操作时,需要注意正确的打开和关闭流,避免资源泄露和数据丢失的风险。此外,Java 7引入的NIO(New IO)库提供了更高效的IO处理,使用Channel和Buffer来代替传统的流式处理,在处理大量数据或高并发情况下具有更好的性能。 

2.Java IO与 NIO的区别

Java的IO(Input/Output)和NIO(New IO)是两种不同的IO模型。

Java IO是传统的面向流(Stream)的IO模型,它以流的方式处理输入和输出。在Java IO中,数据通过输入流(InputStream)和输出流(OutputStream)进行传输,以字节(byte)为单位进行操作。Java IO提供了丰富的类和接口,如FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等,用于处理文件、网络通信和其他IO操作。但是,Java IO在处理大量数据和并发请求时可能存在性能瓶颈。

Java NIO是一种基于Channel和Buffer的非阻塞(Non-blocking)IO模型。它引入了新的概念,如Selector、Channel和Buffer,并提供了更灵活、高效的IO操作方式。在Java NIO中,数据通过Channel进行读写,以Buffer作为中介来操作数据。相对于Java IO的流式处理,Java NIO的缓冲区(Buffer)可以提供更高的读写效率,同时非阻塞IO的机制可以实现单线程处理多个请求。

主要区别如下:

1. IO是面向流的,NIO是面向缓冲区的:Java IO是按照字节流或字符流的方式进行数据读写,而NIO是通过一组缓冲区来进行数据传输。

2. IO是阻塞式的,NIO是非阻塞式的:Java IO的读写操作是阻塞的,即当进行IO操作时,在读取完数据或写入数据前,当前线程会被阻塞。而Java NIO的读写操作是非阻塞的,在进行IO操作时,如果当前没有可读写的数据,线程不会被阻塞,可以继续处理其他任务。

3. IO适用于较少的连接和大数据量的处理,NIO适用于大量连接和较少数据量的处理:由于Java IO是阻塞式的,每个连接需要一个线程来处理读写操作,当连接数较多时,会消耗大量的系统资源。而NIO的非阻塞式可以使用一个线程处理多个连接,可以更有效地处理大量连接。

4. IO较简单且易于使用,NIO较复杂且需要更多的编程技巧:Java IO提供的API较为简单,易于使用和理解。而NIO的API更为复杂,需要熟悉Buffer、Channel、Selector等概念和使用方式。

综上所述,Java IO适用于处理较少的连接和大量的数据,而Java NIO适用于处理大量连接和较少的数据。选择合适的IO模型取决于具体的应用场景和需求。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LSuccess

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

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

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

打赏作者

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

抵扣说明:

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

余额充值