java NIO称为非阻塞IO。读写的过程中不会发生阻塞线程

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
**
 * JAVA NIO
 * NIO称为非阻塞IO。读写的过程中不会发生阻塞线程
 * 我们之前所学习的流,称为BIO:阻塞是IO,就是在读写的过程中可能会发生阻塞现象。
 */
public class NIODemo1 {
   
   
    public static void main(String[] args) throws IOException {
   
   
        /*
            非阻塞IO面向Channel("通道")的,不是面向Stream(流)的。

            流的特点:方向单一,顺序读写。流要么是输入流用于顺序读取数据,要么是输出流用于顺序写出数据

            Channel的特点:双向的,既可以读又可以写。

            JAVA NIO核心API:
            Channel 通道,常见的实现:
            FileChannel:文件通道,可对文件进行读写操作
            SocketChannel:套接字通道,可以与远端计算机进行TCP读写操作
            ServerSocketChannel:服务端的套接字通道,用于监听客户端的连接

            Buffer缓冲区,通道是对缓冲区中的数据进行读写操作
            常见的缓冲区实现
            ByteBuffer:字节缓冲区,缓冲区内部内容都是字节
         */
        //BIO的文件复制操作,使用流的方式进行复制
//        FileInputStream fis = new FileInputStream("movie.wmv");
//        FileOutputStream fos = new FileOutputStream("movie_cp.wmv");
//        byte[]
JAVA NIO知识点总结——网络阻塞IO非阻塞IO 传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write()时,该线程阻塞,直到有一些数据被取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。     Java NIO非阻塞模式的。当线程从某通道进行读写数据时 阅读详情

相关推荐

阻塞IO非阻塞IO

什么是阻塞IO,什么是非阻塞IO?区分他们有何用? 使用java阻塞IO实现非阻塞IO。 怎么使用c语言实现非阻塞式socket线程

Leaviathan的博客 7987

阻塞IO非阻塞IO

IO:用于文件取和写入操作。 很多时候不要把技术想的很高大上,其实在其中的设计模式或者说设计理念,是为解决什么而生,为什么必须使用,这些才是真正的难点。 在我的认知里 第一,我们写的代码其实本质就是文件,无论文件是什么结尾,其实都是无关紧要的,都是字母和数字,制定规则的人才是最为强大的。 第二,互联网和计算机就像是代替了传统的邮件信息传输,而计算机就将互联网中的信息通过IO取和写入到我们的视野面前。 第三,任何程序都会有主方法,运行程序其实本质就像是计算机在调用方法去执行。 第四,数据的传输

ZhA_NG_HaO的博客 625

JAVA NIO 不是同步非阻塞I/O吗,为什么说JAVA NIO提供了基于Selector的异步网络I/O?

java nioio模型是同步非阻塞,这里的同步异步指的是真正io操作(数据内核态用户态的拷贝)是否需要进程参与。 而说java nio提供了异步处理,这个异步应该是指编程模型上的异步。基于reactor模式的事件驱动,事件处理器的注册和处理器的执行是异步的。 JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。 下面说说我的理解,client和服务器建立了socket连接: 1、同步阻塞io(Blocking, synchronous):client在调用.

shayukaifa的博客 1654

IO阻塞非阻塞、同步和异步

阻塞的时候线程会被挂起当数据还没准备好时,调用了阻塞的方法,,会让出CPU时间片,此时是无法处理过来的请求,需要等待其他线程来进行唤醒,该线程才能进行后续操作或者处理其他请求。意味着,当数据还没准备好的时候,即便我调用了阻塞方法,该线程不会被挂起,后续的请求也能够被处理。

mxt51220的博客 1062

Java NIO系列教程(八) SocketChannel

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34376986的博客 356

使用 SocketChannel 读写

在本章中,您将学习: 从 SocketChannel 取 写入 SocketChannel 从 SocketChannel 取 import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; /* j ava 2s . c o m*/ public class Main { public static void main(String[] argv) throws Exception { ByteBu..

allway2的博客 890

阻塞IO非阻塞IO(NIO)

IO是输入input和输出output的首字母的缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动;另外,对于一次IO,它究竟是输入还是输出,是针对于不同的主体而言的,不同的主体有不同的描述,例如,甲乙两人交谈,甲将大脑中的想法通过声带震动,继而通过声波传入乙的耳朵,乙通过耳膜的震动再由神经将信号解析到大脑,这个数据流动的过程对于甲而言是输出,对乙而言是输入。阻塞IO是指调用结果返回之前,当前线程会被挂起。调用线程只有在的到结果之后才会返回。非阻塞IO

weixin_53153139的博客 1329

Java NIO 快速入门:Java 非阻塞 IO 编程详解

Java NIO(New Input/Output)是一套从Java 1.4开始引入的高效IO库,旨在替代传统的阻塞IO。它通过非阻塞模式和多路复用技术,极大地提升了并发性能,非常适合高并发场景。本文将以简单易懂的方式带你入门Java NIO,轻松掌握其核心概念和实际应用。

m0_64516972的博客 2932

java nio 原理 非阻塞IO Netty

I/O相关的操作,详细各位从事java的人员并不陌生,顾名思义也就是,对应着连个动词,Read/Write读写两个动作,但是在上层系统应用中无论是还是写,操作系统都不会直接的操作物理机磁盘数据,而是由系统内核加载磁盘数据!我们以Read为例,当程序中发起了一个Read请求后,操作系统会将数据从内核缓冲区加载到用户缓冲区,如果内核缓冲区内没有数据,内核会将该次请求追加到请求队列,当内核将磁盘数据取到内核缓冲区后,再次执行请求,将内核缓冲区的数据复制到用户缓冲区,继而返回给上层应用系统!

1727

Java 中的阻塞 IO非阻塞 IO

IO(输入输出)操作是一个基础而又关键的部分。在 Java 中,处理 IO 通常涉及到阻塞 IO非阻塞 IO 两种模式。本文将介绍这两种模式的概念、特点以及在 Java 编程中的应用场景与区别。

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 5850

NIO阻塞非阻塞IONIO完成网络通信

阻塞非阻塞 传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write()时,该线程阻塞,直到有一些数据被取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。 Java NIO非阻塞模式的。当线程从...

诗水人间 13万+

阻塞线程io非阻塞线程nio

**使用场景** | 简单的 I/O 操作,低并发场景 | 高并发、大量 I/O 操作,如服务器开发 |Java 中的 I/O(输入输出)操作可以分为 **阻塞 I/O** 和 **非阻塞 I/O**,它们主要区别在于:是否在数据准备好之前,线程会被阻塞。但在高并发场景中,阻塞 I/O 会因为线程等待而导致资源浪费。| **线程行为** | 当 I/O 操作未完成时,线程会被阻塞 | 线程不会阻塞,可以继续执行其他任务 |

weixin_43016432的博客 1816

非阻塞IO-Java NIO

Java NIOJava1.4引入的一种新的IO API,它提供了非阻塞IO,选择器、通道、缓冲区等新的概念和机制。相比传统的IO,多出的N不单纯是新的,更表现在Non-blocking非阻塞NIO具有更高的并发性、可扩展性以及消耗资源少的优点。

2301_82014959的博客 1246

java NIO(non-blocking io 非阻塞 IO)知识精讲

non-blocking io 非阻塞 IOchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层channelbuffer 常见的 Channel 有buffer 则用来缓冲读写数据,常见的 buffer 有selector 单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途socket1t

lonelykkk的博客 2365

Java中的IONIO面试题

1、JavaIO 流? JavaIO 流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。 InputStrea...

qwe123147369的博客 1881

Java NIO(非阻塞读写)和BIO(阻塞读写)

一个线程可以处理成千上万的客户端连接,底层调用的3个epoll函数,通过事件响应机制(监听机制)实现事件的轮询。epoll实现事件的监听机制,有事件收发就处理,没有就会堵塞进行监听。

yitang的博客 841

同步阻塞IO、同步非阻塞IO、异步阻塞IO多路复用)、异步非阻塞IO区别

常用4种IO模型 (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。 注意这里所说的NIO并非JavaNIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻...

datuzijean的博客 4607

Java IONIO的区别

主要区别 IO NIO 面向字节流 面向缓冲区 阻塞 基于Selector的非阻塞 Java IONIO的主要区别体现在以上两个方面,以下详细说明这些区别的具体含义。面向流和面向缓冲区这个概念和编程方法中的面向过程、面向对象类似。Java IO 是面向流的而Java NIO是面向缓冲区的。在Java IO取数据和写入数据是面向流(Stream)的,这表示当我们从流中

riskLoveHe的博客 8759
上一篇: java反射机制
下一篇: sql查询语句中各部分的执行顺序
DQchat
博客等级 码龄9年 86粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DQchat

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

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

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

打赏作者

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

抵扣说明:

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

余额充值