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. 被辞退时N+1的说法

    “N+”,指在这家公司工作了N年,赔偿N个月的上年平均工资,再加上1个月“代通知金”. N的上限时12: 上年平均工资的上限是工作所在城市平均工资的三倍. StudyFrom知乎 所以很明显能够算出来 ...

  2. [转帖]/etc/security/limits.conf的含义

    https://www.cnblogs.com/pzk7788/p/7250723.html /etc/security/limits.conf 是 Linux 资源使用配置文件,用来限制用户对系统资 ...

  3. mysql数据库优化大全

    转载:https://blog.csdn.net/weixin_38112233/article/details/79054661 数据库优化 sql语句优化 索引优化 加缓存 读写分离 分区 分布式 ...

  4. FICO基础知识(二)

    FI中的maser data: COA (Chart Of Account)  科目表 Account 科目 Vendor master dada  供应商主数据 Customer master da ...

  5. “一战通offer”互联网实习季编程挑战

    1.字符串变形 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把 ...

  6. 流程控制之if判断,while循环,for循环

    if判断? 什么是if判断? 判断一个条件如果成立则做...不成立则... 为什么要有判断? 让计算机像人一样具备判断的能力 如何用if判断 if 条件1: code1    code2    cod ...

  7. 记一次配置oh my zsh的坑

    oh-my-zsh:https://github.com/robbyrussell/oh-my-zsh prezto:https://github.com/sorin-ionescu/prezto 我 ...

  8. python自动化运维笔记1 —— 系统性能信息模块psutil

    一.系统基础信息模块 1.1 系统性能信息模块psutil psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率( ...

  9. python之tkinter使用-文件系统遍历

    # tkinter:文件系统遍历 import tkinter as tk, os from time import sleep class DirList(object): def __init__ ...

  10. matplotlib之随机漫步

    # 随机漫步类 from random import choice from matplotlib import pyplot as plt from pylab import mpl from ma ...