`

标准输入流 自己包装System.in 为什么还是会等待用户输入

阅读更多

1、由于System.in 连接的是程序和控制台

如果控制台没有输入任何东西,那么包装后的readLine() 就只有等待

readLine()是读取一行,控制台什么都没有,readLine()怎么知道换行符在哪里,怎么停止下来,

所有就会等待用户输入,如果直接就输入回车,那么readLine()方法就马上执行完了,

所有当我输入回车后,readLine()方法才能执行完,接着才能执行后面的代码。

2、代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;


public class MyScanner {
   
 private BufferedReader br;
 public MyScanner(InputStream is){
  //因为系统标准输入流是一个字节流,用户无法输入字节
  //将其转换为字符流
   br = new BufferedReader(new InputStreamReader(is));
 }
 public String readLine(){
  
  try {
   //接收键盘输入
   return br.readLine();

//由于br这个流,连接的是控制台,必须读取到换行符,方法才能结束,而现在控制台               

//  什么都没有,所以会停留在这里,用户可以输入,只有输入换行符才会结束这个方法
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return null;
 }
 //根椐用户需要将键盘输入转为字符串和数字
 public String nextLine() {
  
   return readLine();
 }
 public int nextInt(){
  return Integer.parseInt(readLine());
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  MyScanner sc = new MyScanner(System.in);
  String s = sc.nextLine();
  System.out.println(s);
  int i = sc.nextInt();
  System.out.println(i);
 }


 
}

分享到:
评论

相关推荐

    关于TCP协议的Java编程实例

    3. **读取客户端数据**:通过Socket对象获取输入流,并读取客户端发送的数据。 4. **向客户端发送数据**:通过Socket对象获取输出流,并向客户端发送数据。 ##### 服务器端代码详解 ```java public class TcpServer...

    java socket 多线程通讯示例

    例如,我们可以使用`BufferedReader`和`PrintWriter`对输入流和输出流进行包装,方便地读取和写入文本数据。 以下是简单的代码片段示例: ```java // 服务器端 ServerSocket serverSocket = new ServerSocket(port...

    TCP.rar_it

    当完成数据交换后,必须关闭输入流、输出流和套接字,以防止资源泄露。 此外,TCP提供了一套完整的机制来确保数据的可靠传输,包括序列号、确认应答、重传机制、流量控制和拥塞控制等。这些机制确保了即使在网络...

    关于Java_Socket编程的详细介绍

    通常,我们会使用`BufferedReader`和`PrintWriter`对输入流和输出流进行包装,以方便进行文本读写: ```java BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); ...

    黑马程序员入学Java知识

    每个平台都有自己的JVM实现,因此可以在不同的操作系统上运行相同的Java程序。 - **JVM**:Java虚拟机是一个虚拟计算机,负责执行字节码,并提供了一个独立于硬件环境的运行时环境。 4. **JRE和JDK的区别** - **...

    socket编程 实现服务器和客户的通信

    在实际编程中,我们通常会使用BufferedReader和PrintWriter等类来包装输入流和输出流,以便更方便地进行文本数据的读写。例如,使用BufferedReader的readLine()方法读取客户端发送的文本行,使用PrintWriter的...

    Socket套接字—Java套接字编程(上1).rar_socket_套接字_套接字 Java

    - 通过Socket对象获取输入流和输出流,用于读写数据。InputStream和OutputStream分别代表了网络连接的输入和输出,可以使用BufferedReader和PrintWriter进行包装,便于进行字符流操作。 3. **数据传输**: - 数据...

    java基础笔记

    这段代码创建了一个输入流读取器,然后用缓冲区读取器包装它,使得可以一行一行地读取用户输入。 接着,集合是Java中存储和管理对象的主要方式。集合框架包括接口(如 `List`, `Set`, `Queue`)和实现这些接口的类...

    例10.03 使用URLConnection对象访问远程文件.rar_remote access java_url_远程文件

    - **缓冲流**:为了提高效率,通常会使用`BufferedReader`或`BufferedWriter`对输入流和输出流进行包装。 - **读取响应**:对于GET请求,可以通过`getInputStream()`读取HTTP响应的主体。对于POST或其他有主体的...

    Java Socket套接字

    通信阶段,Socket提供了输入流和输出流进行数据交换。`Socket.getInputStream()`返回一个InputStream,用于读取服务器发送的数据;`Socket.getOutputStream()`返回一个OutputStream,用于向服务器写入数据。通常,...

    Java Socket网络编程研究.zip

    在实际应用中,我们通常使用`InputStreamReader`、`BufferedReader`和`PrintWriter`等流类来包装Socket的输入/输出流,以方便文本数据的读写。例如,客户端可能这样发送数据: ```java Socket socket = new Socket...

    Java socket tcp/ip

    Java中的InputStream和OutputStream抽象类提供了基本的字节流操作,Socket的输入流和输出流是它们的子类。 1. 读取数据: - 使用Socket的InputStream,通常使用`read()`或`read(byte[] buffer)`方法读取数据。 - ...

    超级有影响力霸气的Java面试题大全文档

    为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域...

    黑马程序员入学Java精华总结

    - 包装类将基本数据类型转换为对象形式。 2. **基本数据类型和包装类相互转换** - 使用包装类提供的构造方法或静态方法进行转换。 3. **基本类型和String之间的转换** - 使用String类提供的`valueOf()`方法或...

    整理后java开发全套达内学习笔记(含练习)

    System.out.printf() 可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串 在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion 以“%”开头,[第几个...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    java全集.pdf JAVA全集

    - 输入流和输出流。 - 字节流和字符流。 **15.6 I/O输入输出** - 包括文件读写、网络通信等多种应用场景。 以上内容涵盖了Java的基础知识到高级特性,从基本语法到面向对象编程,再到多线程和I/O操作等,全面地...

Global site tag (gtag.js) - Google Analytics