1,从标准输入上建立输入流:

BufferedReader localReader = new BufferedReader(
new InputStreamReader(System.in));

System.in 表示标准输入,一般指键盘。

建立输入流,从标准输入读取数据到缓冲区中。

当在标准输入中输入一行字符串时,按回车之后,这行数据就会被读取到缓冲区中。

比如: abc  \r\n(表示按下回车键)

那么msg就会赋值为 abc

String msg = null;
while ((msg = localReader.readLine()) != null) {
System.out.println(msg);//打印从标准输入读取到的数据
process(msg);
if (msg.equals("bye"))//当输入 bye 时 结束
break;
}

BufferedReader 使用 readLine方法读取数据时,每次读取一行。以回车换行标记一行数据的结束。

使用if语句来判断用户是否在标准输入中输入了bye。若输入了bye之后,就跳出while循环。若没有if语句,while循环就不会终止。

2,从Java的 InputStream中建立输入流

从InputStream中输入与从键盘输入是有区别的,InputStream流可以关闭(异常关闭或正常关闭),而对于键盘而言,没有关闭的概念,只要你从键盘敲入字符并按回车就会输入一行字符。

下面是从Socket的输入流中建立起BufferedReader的输入:

BufferedReader localReader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));

在此种情况下,当使用while( (str = localReader.readLine()) != null )读取数据时,何时才能读取完毕跳出while循环呢?

一种方法是与 1 中讨论的一样,使用一个标记字符串,如"bye",具体解释看上面。

另一种方法是:因为本例是从Socket的InputStream中读入数据的,因此当Socket的发送端发完数据后并关闭了Socket,那么接收端就会读入发送端的数据。当接收端再读数据时,readLine()就会返回null。此时会跳出while。(若发送端没有关闭Socket,接收端再读数据时,就会阻塞等待发送端再发送数据过来。若发送端关闭了Socket,接收端再读数据时,就会返回null)

综上所述,当在while循环中使用BufferedReader的readLine方法时,while循环退出的条件是:

a)在while循环中使用 if 判断 结束的标记字符串(如 "bye"),使用break 跳出while,

b)若是建立的Socket连接、或者其他InputStream流的输入。当发送方关闭了流时,readLine方法再次读取时会读到 null 值。这样也就跳出了while。

注意如果是写数据时,记得flush一下。

JAVA BufferedReader 类从标准输入读取数据的更多相关文章

  1. Java笔记--java一行一行写入或读取数据

    转自 Ruthless java一行一行写入或读取数据 链接:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/ ...

  2. scanf是怎么从标准输入读取数据的

    scanf是从标准输入读取数据的 假设现在标准输入中的数据是123456 int a; 而我scanf("%d",&a); 会把123456转化为数字然后存入到a中. 如果 ...

  3. Java从.CSV文件中读取数据和写入

    .CSV文件是以逗号分割的数据仓储,读取数据时从每一行中读取一条数据元祖,也就是一条数据,再用字符分割的方式获取表中的每一个数据项. import java.io.BufferedReader;    ...

  4. Java——IO类,字节流读数据

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  5. Java向指定Excel写入读取数据

    今天在开发中遇到用户列表导入导出的功能实现,这里了解到使用POI函数库可以完成此任务!特此记录一下 POI Apache POI是Apache软件基金会开放的源码函数库,POI提供API给Java程序 ...

  6. java一行一行写入或读取数据

    原文:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/phsftp/evdokey目录下有个evdokey_2 ...

  7. 通过纯Java代码从excle中读取数据(为.xlsx文件)

    参考链接: 程序代码: package demo; import java.io.File; import java.io.IOException; import java.io.InputStrea ...

  8. Java使用poi从数据库读取数据生成Excel表格

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  9. Java——常用类(基础类型数据包装类)

    [包装类]   包装类(如Integer.Double等)这些类封装了一个相应的基础数据类型数值,并为其提供了一系列操作.     例如:java.lang.Integer类提供了以下构造方法:   ...

随机推荐

  1. 用Axios Element 实现全局的请求 loading

        Kapture 2018-06-07 at 14.57.40.gif demo in github 背景 业务需求是这样子的,每当发请求到后端时就触发一个全屏的 loading,多个请求合并为 ...

  2. C++拷贝构造函数的调用时机

    一.拷贝构造函数调用的时机 ​ 当以拷贝的方式初始化对象时会调用拷贝构造函数,这里需要注意两个关键点,分别是以拷贝的方式和初始化对象 1. 初始化对象 初始化对象是指,为对象分配内存后第一次向内存中填 ...

  3. Linux标准输入、输出和错误和文件重定向 专题

    当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名. 下面就是这些文件描述符及它们通常所 ...

  4. [转帖].NET Core 2.0 是您的最好选择吗?

    .NET Core 2.0 是您的最好选择吗? https://www.cnblogs.com/vipyoumay/p/7388371.html 1. NET Core 2.0 是您的最好选择吗? 1 ...

  5. [转载]以及部分总结--Linux下创建单机ASM存储的Oracle实例的过程---感谢方总

    Linux下单机安装ASM流程总结 一.安装Linux ESXi上传iso镜像至存储目录 创建虚拟机,并且选择主机设备的ISO启动 选择完成时编辑虚拟机设置 配置镜像文件如下: 打开控制台: 并且选择 ...

  6. HMM模型学习笔记(前向算法实例)

    HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...

  7. python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)

    一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况.但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用. 今天晚上正好好好研究了一番解答了自己心中的困惑. Q:p ...

  8. python学习笔记三——控制语句

    2.5 运算符与表达式 2.5.1 算术运算符和算术表达式 算术运算符包括四则运算符.求模运算符和求幂运算符. 算术运算符 加减乘除:+ - * / 表达式:x+y   x-y   x*y  x/y ...

  9. arctan

    ArcTanWhen the ArcTan functional configuration is selected, the input vector (X_IN,Y_IN) is rotated( ...

  10. luogu3107

    洛谷P3107题面 相对较为模板化的代码 f[i][j][bo1][bo2]记录到第i位,数字num出现了x次(j初始为20,若当前数字不为num,j++:否则j--:最后只要记录j<=20的总 ...