javase-关于system.in输入流 问题!

问题描述

关于system.in输入流 问题!

如图所示!如果是读取文件,当读到文件末尾条件等于null,退出循环。。而这里如果不输入内容,那程序是在哪里阻塞着???为什么??它不是应该一直readline吗??

解决方案

是这一句阻塞了。

str=br.readLine();

你输入完毕后,会进入第二次等待输入状态。
在BufferedReader中有个方法叫fill方法,会一直监听控制台输入,可以具体的看一下。

解决方案二:

你发的图看不清楚啊,分辨率太小了。

解决方案三:

在java.io.BufferedReader中有这个方法。下面是这个方法的介绍,你可以看看。是不是你的JDK没有源码啊?


    /**
     * Fills the input buffer, taking the mark into account if it is valid.
     */
    private void fill() throws IOException {
    int dst;
    if (markedChar <= UNMARKED) {
        /* No mark */
        dst = 0;
    } else {
        /* Marked */
        int delta = nextChar - markedChar;
        if (delta >= readAheadLimit) {
        /* Gone past read-ahead limit: Invalidate mark */
        markedChar = INVALIDATED;
        readAheadLimit = 0;
        dst = 0;
        } else {
        if (readAheadLimit <= cb.length) {
            /* Shuffle in the current buffer */
            System.arraycopy(cb, markedChar, cb, 0, delta);
            markedChar = 0;
            dst = delta;
        } else {
            /* Reallocate buffer to accommodate read-ahead limit */
            char ncb[] = new char[readAheadLimit];
            System.arraycopy(cb, markedChar, ncb, 0, delta);
            cb = ncb;
            markedChar = 0;
            dst = delta;
        }
                nextChar = nChars = delta;
        }
    }

    int n;
    do {
        n = in.read(cb, dst, cb.length - dst);
    } while (n == 0);
    if (n > 0) {
        nChars = dst + n;
        nextChar = dst;
    }
    }

解决方案四:

While(!EOF){
readline(...);
}
伪代码,仅供参考

时间: 2024-10-21 11:13:04

javase-关于system.in输入流 问题!的相关文章

抽象类-System.in输入流问题,in类成员属性实例化成为了InputStream

问题描述 System.in输入流问题,in类成员属性实例化成为了InputStream java中在System类中in字段被声明为InputStream类的实例化对象,但是InputStream类为抽象类 应该是无法别实例化的,为什么在System类中被实例化了呢? 解决方案 在System类中是这样定义in的. public final static InputStream in = nullInputStream(); nullInputStream是这样实现的: private sta

java中Scanner类的简单用法分享_java

复制代码 代码如下: public static void main(String[] args) {     System.out.println("请输入值,以回车结束:");     Scanner sc = new Scanner(System.in);     sc.useDelimiter("\n");     while (sc.hasNext()) {         String s = sc.next();         System.out.

跟益达学Solr5之玩转post.jar

   为了方便用户往solr中添加索引,Solr为用户提供了一个post.jar工具,用户只需要在命令行下运行post.jar并传入一些参数就可以完成索引的增删改操作,对,它仅仅是一个供用户进行Solr测试的工具而已,有关post.jar的使用说明如下: Txt代码   SimplePostTool version 5.1.0   Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg> [<fi

【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(四)

[前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 --   [下载]本人刚学习Java时总结的一些JavaSE常见面试题,偶尔在电脑中翻出,重新整理一下分享给需要的人,主要针对初级程序员.想要PDF完整版下载的,评论里留言留下你的邮箱! 61.同步代码块与同步函数的区别? 答:(1)同步代码块:位置比较灵活,锁对象可以任意对象,但必须是同一对象.格式:              

java io学习(二十二) BufferedReader(字符缓冲输入流)

BufferedReader 介绍 BufferedReader 是缓冲字符输入流.它继承于Reader. BufferedReader 的作用是为其他字符输入流添加一些缓冲功能. BufferedReader 函数列表 BufferedReader(Reader in) BufferedReader(Reader in, int size) void close() void mark(int markLimit) boolean markSupported() int read() int

java io学习(十三) 数据输入流的认知、源码和示例

DataInputStream(数据输入流)的认知.源码和示例 DataInputStream 介绍 DataInputStream 是数据输入流.它继承于FilterInputStream. DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型".应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据. DataInputStream 函数列

java io学习(十一) 缓冲输入流的认知、源码和示例

BufferedInputStream(缓冲输入流)的认知.源码和示例 本章内容包括3个部分:BufferedInputStream介绍,BufferedInputStream源码,以及BufferedInputStream使用示例. BufferedInputStream 介绍 BufferedInputStream 是缓冲输入流.它继承于FilterInputStream. BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供"缓冲功能"以及支持&

java的输入流

当然,我们经常想做的一件事情是将格式化的输出打印到控制台,但那已在第5章创建的com.bruceeckel.tools中得到了简化. 第1到第4部分演示了输入流的创建与使用(尽管第4部分展示了将输出流作为一个测试工具的简单应用). 1. 缓冲的输入文件 为打开一个文件以便输入,需要使用一个FileInputStream,同时将一个String或File对象作为文件名使用.为提高速度,最好先对文件进行缓冲处理,从而获得用于一个BufferedInputStream的构建器的结果句柄.为了以格式化的

JAVA基础培训(9),控制台键盘输入(System.in)

从键盘输入是一个很重要的功能,这里给出了个人推荐的方式,用Scanner读取输入数 据 package lession9; import java.io.InputStream; import java.util.Scanner; /** * 老紫竹JAVA基础培训(9),控制台键盘输入(System.in). * * @author 老紫竹 JAVA世纪网(java2000.net) * */ public class Lession9 { public static void main(St