首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Java中,BufferedReader readLine阻塞在交互式外壳上

在Java中,BufferedReader的readLine方法是用于从输入流中读取一行文本的方法。当readLine方法被调用时,它会阻塞在交互式外壳上,等待用户输入一行文本后才会返回。

BufferedReader是Java IO库中的一个类,它提供了高效的字符输入流读取功能。readLine方法会一直阻塞,直到满足以下条件之一才会返回:

  1. 用户在交互式外壳中输入了一行文本并按下回车键。
  2. 输入流被关闭。

在交互式外壳上阻塞的意思是,当readLine方法被调用时,程序会停止执行,直到用户输入了一行文本。这种阻塞的特性使得程序可以等待用户输入,从而实现交互式的功能。

BufferedReader的readLine方法在很多场景下都非常有用,例如命令行工具、控制台应用程序、聊天程序等需要与用户进行交互的场景。通过阻塞在交互式外壳上,程序可以等待用户输入并及时做出响应。

腾讯云提供了丰富的云计算产品,其中与Java开发相关的产品包括云服务器、云数据库、云存储等。您可以通过以下链接了解更多关于腾讯云的产品信息:

  1. 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  2. 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  3. 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos

请注意,以上链接仅供参考,具体的产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java核心(五)深入理解BIO、NIO、AIO

1.1 BIO、NIO、AIO的区别 BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里...(reader); StringBuffer bf = new StringBuffer(); String str; while ((str = bufferedReader.readLine())...这种方式通常能提升 I/O 性能,但是会增加CPU 消耗,要考虑增加的 I/O 性能能不能补偿 CPU 的消耗,也就是系统的瓶颈是 I/O 还是 CPU 。...异步阻塞 这种方式分布式数据库中经常用到,例如在网一个分布式数据库写一条记录,通常会有一份是同步阻塞的记录,而还有两至三份是备份记录会写到其它机器,这些备份记录通常都是采用异步阻塞的方式写 I/O...((str = bufferedReader.readLine()) !

67410

Java核心(五)深入理解BIO、NIO、AIO

1.1 BIO、NIO、AIO的区别 BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里...(reader); StringBuffer bf = new StringBuffer(); String str; while ((str = bufferedReader.readLine())...这种方式通常能提升 I/O 性能,但是会增加CPU 消耗,要考虑增加的 I/O 性能能不能补偿 CPU 的消耗,也就是系统的瓶颈是 I/O 还是 CPU 。...异步阻塞 这种方式分布式数据库中经常用到,例如在网一个分布式数据库写一条记录,通常会有一份是同步阻塞的记录,而还有两至三份是备份记录会写到其它机器,这些备份记录通常都是采用异步阻塞的方式写 I/O...((str = bufferedReader.readLine()) !

6.3K43
  • IO流知识盲点

    IO流知识盲点 BufferedReaderreadLine()方法读取不到换行和回车时会阻塞 BufferedReaderreadLine()方法读取不到换行和回车时会阻塞 readLine()没有读取到换行符或回车符时...一直readLine()阻塞。当客户端发来下一条消息时。...会继续下一次循环,等待读取下一条消息 1.原来readLine()方法进行读取一行时,只有遇到回车(\r)或者换行符(\n)才会返回读取结果,这就是“读取一行的意思”,重要的是readLine()返回的读取内容并不包含换行符或者回车符...; 2.由于客户端使用的readLine()来读取用户输入,所以当用户按下回车键是,readLine() 返回读取内容,但此时返回的内容并不包含换行符(查看readLine()源码,会将\r,\n或者...-1),而实际readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null。

    51710

    BIO聊天室项目中的演化

    image.png 通过服务器端日志可以看出 客户端接入事件都是主线程main线程发生的。 而客户端消息的收发都是新的子线程发生的。而且每一个连接都需要一个全新的线程来处理。...通过约定的符号 先在输出流的第一个字节写入本次传输将会传递的数据的字节大小,接收方获取到这个值之后,从输入流读取指定个数的字节即可。...String message = bufferedReader.readLine(); if (StringUtils.isNotBlank(message...while (true) { try { String userInputStr = bufferedReader.readLine...改动服务端代码的两行代码 image.png 再次测试 image.png 服务端的线程数维持了10个,保护了服务端的安全~ # 参考 【Socket】Java Socket编程基础及深入讲解 Java

    48210

    Redis网络模型究竟有多强

    BIO究竟阻塞在哪里拿Server端的BIO来说明这个问题,阻塞在了serverSocket.accept()以及bufferedReader.readLine()这两个地方。...同样,bufferedReader.readLine();下一行打个断点,已连接的客户端发送数据之前,这个断点绝不会触发!...解决这个问题的核心就是别让代码卡在readLine()就可以了,我们可以使用新的线程来readLine(),这样代码就不会阻塞在readLine()上了。3.5....由于创建了一个新的进程,因此目录下对多出一个out.31168的文件,我们看一下该文件的内容:图片发现子进程阻塞在了recvfrom()这个系统调用上,对应的Java源码就是bufferedReader.readLine...BIO总结到此为止,我们就通过底层的系统调用证明了BIOaccept()以及readLine()的阻塞。最后用一张图来结束BIO之旅。

    78451

    彤哥说netty系列之Java BIO NIO AIO进化史

    简介 一章我们介绍了IO的五种模型,实际Java只支持其中的三种,即BIO/NIO/AIO。 本文将介绍Java这三种IO的进化史,并从使用的角度剖析它们背后的故事。...msg; while ((msg = reader.readLine()) !...这里有个歧义,很多人认为Java的NIO是Non-Blocking IO的缩写,其实并不是。 使用NIO则多条连接的数据准备阶段会阻塞在select,数据从内核空间拷贝到用户空间依然是阻塞的。...,然后就可以回调方法completed()里面读取数据了,当然也要继续监听accept事件。...槽点 (1)三种IO的实现方式对于换行符的处理竟然都不一样,BIO不会把换行符带过来(其实是带过来了,因为用了readLine()方法,所以换行符没了),NIO中会把换行符加在消息末尾,AIO中会把换行符当成一条新的消息传过来

    56810

    Java基础之UDP协议和TCP协议简介及简单案例的实现

    Internet的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。...百度讲的有点复杂,不太容易懂,比较通俗的说法就是:UDP协议会把数据打包(限小容量的数据),然后扔给目标地址,但是这个包能不能扔的到目标机器,就不管了,udp就只管扔。...常用方法: receive(DatagramPacket p) :接收数据报文到p。receive方法是阻塞的,如果没有接收到数据报包的话就会阻塞在哪里。...; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import...userName = br.readLine(); String password = br.readLine(); //判断用户名和密码是否正确 boolean

    86950

    JAVA高并发网络编程之BIO堵塞网络编程

    (一)JAVA堵塞的网络应用 ① 服务端代码编写 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream...这部分 的内容, 我们的url 的各种参数都是属于请求数据这一部分的。。...同步IO 应用阻塞在发送或接收数据的状态,知道数据成功传输或返回失败。 异步IO 应用发送或接收数据后立刻返回,实际处理是异步执行的。...带来的问题 阻塞导致处理网络I/O,一个线程只能处理一个网络连接。...PS:阻塞就一直等待,这也是NIO出现的原因,一个线程好不容易操作系统申请一个宝贵的资源,JVM也为它创建了一个对象,宝贵的内存分给他一部分了,结果他只是去等待,这样不太好,想象也可以想象的到。

    51220

    java中断机制深入分析之Thread源码跟踪

    线程执行过程的适当位置,检查这个变量,来获知当前线程是否应该结束。...= NULL) slp->unpark() ;//如果当前线程阻塞在sleep方法,则调用unpark唤醒线程 } // For JSR166....: volatile jint _interrupted; // 中断标记是存储osThread,而不是java的Thread volatile bool interrupted() const...1 : 0; //设置中断标记 } 由源码可知,Thread.interrupt0()方法实际并不是像jdk注释说的那样,只设置中断标记位,而是设置完中断标记后通过调用类型为ParkEvent的成员变量的...由上述源码可知,当前线程可以阻塞在sleep方法、synchronized修饰的方法、获取共享锁/互斥锁的等方法,不同的类型对应了不同的ParkEvent类型的成员变量。

    76620

    异构数据源同步之数据同步 → datax 改造,有点意思

    所以我们直接在 datax.py 搜索 java 即可 你们会发现只有如下这一行表示 java 命令 ENGINE_COMMAND = "java -server ${jvm} %s -classpath...Java,JVM有两种运行模式:客户端模式和服务器模式。这两种模式是为了优化不同场景下的JVM性能而设计的。 服务器模式:这种模式适用于长时间运行的应用程序,如Web服务器或数据库服务器。...这通常意味着JVM将使用更多的系统资源,但可以提供更好的性能,特别是长时间运行的应用程序 我们先下载 DataX 工具包 解压之后,我的 DataX 的根目录是:G:\datax-tool\datax...不要急着下结论,我们理智分析一波 DataX 正式投入使用的时候,会部署到什么系统,请你们大声的告诉我 不说全部,绝大部分是部署 Linux ,对此我相信你们都没异议吧 那么重点来了:目前主流的...那如果是部署 Windows ,而又不想安装 Python,该如何启动了?

    14710

    java编程_socket_套接字_网络编程

    ==========================================  服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口, 一些操作系统不可以随意使用...============================================================  客户端,使用Socket对网络某一个服务器的某一个端口发出连接请求,一旦连接成功....*; 4 import java.net.Socket; 5 import java.net.ServerSocket; 6 7 /** 8 * 服务器断的工作就是指定的端口上监听....*; 4 import java.net.Socket; 5 import java.net.SocketException; 6 /** 7 * 客户端程序,while循环中所执行的动作是...bye,也是结束对话 通过上面的代码,把"你好"发送出去了,这时候,程序又开始循环,运行到: 1 //接受客户端发送过来的信息 2 info = dis.readUTF(); 这段代码,其实在这里就阻塞在这里了

    1.2K20

    java Scanner读取太慢而超时

    ().split(" "); String[] secondline = br.readLine().split(" "); 注意事项: BufferedReader对象的readLine()方法必须处理...java.io.IOException异常(Exception)(idea快捷键alt+enter抛出异常) readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter...返回字符 br.readline()是整行读取,读取的类型是字符串,我们需要对其分割,spilt(" ")意思是以每一个空格来切割并依次放到字符数组 既然是用于读取键盘输入,那就要用到标准输入流System.in...bw.write(1+""); br.close(); bw.close(); 下面来看一道例题,求二进制1的个数 import java.io.BufferedReader; import java.io.IOException...Java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串,它本质其实是使用正则表达式去读取不同的数据类型 Java.io.BufferedReader类为了能够高效的读取字符序列

    12210
    领券