JAVA BufferedReader 类从标准输入读取数据
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 类从标准输入读取数据的更多相关文章
- Java笔记--java一行一行写入或读取数据
转自 Ruthless java一行一行写入或读取数据 链接:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/ ...
- scanf是怎么从标准输入读取数据的
scanf是从标准输入读取数据的 假设现在标准输入中的数据是123456 int a; 而我scanf("%d",&a); 会把123456转化为数字然后存入到a中. 如果 ...
- Java从.CSV文件中读取数据和写入
.CSV文件是以逗号分割的数据仓储,读取数据时从每一行中读取一条数据元祖,也就是一条数据,再用字符分割的方式获取表中的每一个数据项. import java.io.BufferedReader; ...
- Java——IO类,字节流读数据
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Java向指定Excel写入读取数据
今天在开发中遇到用户列表导入导出的功能实现,这里了解到使用POI函数库可以完成此任务!特此记录一下 POI Apache POI是Apache软件基金会开放的源码函数库,POI提供API给Java程序 ...
- java一行一行写入或读取数据
原文:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/phsftp/evdokey目录下有个evdokey_2 ...
- 通过纯Java代码从excle中读取数据(为.xlsx文件)
参考链接: 程序代码: package demo; import java.io.File; import java.io.IOException; import java.io.InputStrea ...
- Java使用poi从数据库读取数据生成Excel表格
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
- Java——常用类(基础类型数据包装类)
[包装类] 包装类(如Integer.Double等)这些类封装了一个相应的基础数据类型数值,并为其提供了一系列操作. 例如:java.lang.Integer类提供了以下构造方法: ...
随机推荐
- 初学者学习C++的50条忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...
- Java之JSON操作(Jackson)
Java to JSON: package json.jackson; import bean.User; import com.fasterxml.jackson.databind.ObjectMa ...
- Bootstrap自动定位浮标
前面的话 Affix 插件主要功能就是通过插件给某个元素(需要固定的元素)添加或删除position:fixed,实现元素在浏览器窗口的粘性固定效果.本文将详细介绍Bootstrap自动定位浮标 基本 ...
- maven编译的时候跳过test
方式1:用命令带上参数 mvn install -Dmaven.test.skip=true 方式2:在pom.xml里面配置 <plugin> <groupId>org.ap ...
- Codeforces Round#500 Div.2 翻车记
A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- POJ3176-基础DP
很基础的dp题.有一头奶牛想接尽量多的苹果,有w此移动机会. dp[i][w] = max(dp[i-1][w+1] + 能否吃到苹果 ,dp[i-1][w] + 能否吃到苹果) //从上一分钟是否 ...
- hdu 5126 stars (四维偏序,离线,CDQ套CDQ套树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5126 思路:支持离线,那么我们可以用两次CDQ分治使四维降为二维,降成二维后排个序用树状数组维护下就好 ...
- codeforces 1B Spreadsheets
In the popular spreadsheets systems (for example, in Excel) the following numeration of columns is u ...
- android GridView 的使用 实现多项选择
今天小研究了一下GridView,目的是为了实现 下面的效果(GridView多项选择): 首先,在布局文件添加GridView ,创建适配器的items... 具体的都在注释里边了,下面是 程序源码 ...
- [luogu4265][USACO18FEB]Snow Boots silver
题目大意 求出最少需要丢去多少双靴子才能到达终点. 解法 解法一: 看到数据的范围,非常清楚\(O(n^3)\)能过掉所有的数据,那么我们就果断暴力. 解法二: 比较容易会想到用DP做,我一开始定义\ ...