JavaIO流知识点

1. Java IO流的分类

Java的IO流主要分为以下几种:

(1)按数据单位分类
  • 字节流:以字节(8位)为单位进行数据传输,适合处理二进制数据(如图片、视频等)。
    • 字节输入流InputStream(抽象类)
      • 常见实现类:FileInputStreamByteArrayInputStreamBufferedInputStream
    • 字节输出流OutputStream(抽象类)
      • 常见实现类:FileOutputStreamByteArrayOutputStreamBufferedOutputStream
  • 字符流:以字符(16位)为单位进行数据传输,适合处理文本数据。
    • 字符输入流Reader(抽象类)
      • 常见实现类:FileReaderBufferedReaderInputStreamReader
    • 字符输出流Writer(抽象类)
      • 常见实现类:FileWriterBufferedWriterOutputStreamWriter
(2)按流向分类
  • 输入流:从数据源读取数据。
    • 例如:InputStreamReader
  • 输出流:向目标写入数据。
    • 例如:OutputStreamWriter
(3)按功能分类
  • 节点流:直接操作数据源或目标。
    • 例如:FileInputStreamFileReader
  • 处理流:对节点流进行包装,提供额外的功能(如缓冲、转换等)。
    • 例如:BufferedInputStreamBufferedReader

2. NIO、AIO、BIO的区别

(1)BIO(Blocking I/O,同步阻塞IO)
  • 特点:同步阻塞模式,每个连接需要一个独立的线程处理,适合连接数较少的场景。
  • 缺点:线程开销大,不适合高并发场景。
  • 示例
    try (ServerSocket serverSocket = new ServerSocket(8080)) {
         
        while (true) {
         
            Socket socket = serverSocket.accept(); // 阻塞
            new Thread(() -> {
         
                // 处理请求
            }).start();
        }
    }
    
(2)NIO(Non-blocking I/O,同步非阻塞IO)
  • 特点:同步非阻塞模式,使用多路复用器(Selector)管理多个通道(Channel),适合高并发场景。
  • 核心组件
    • Channel:数据传输通道,例如FileChannelSocketChannel
    • Buffer:数据缓冲区,例如ByteBuffer
    • Selector:多路复用器,监听多个通道的事件。
  • 示例
    try (ServerSocketChannel serverChannel = ServerSocketChannel.open();
         Selector selector = Selector.open()) {
         
        serverChannel.bind(new InetSoc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nice文棋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值