java InputStream类中read()方法的返回的问题

程序如下:importjava.io.InputStream;importjava.io.IOException;publicclassInputEcho{publics... 程序如下:

import java.io.InputStream;
import java.io.IOException;

public class InputEcho {
public static void mb_echo(InputStream in){
try{
while(true){
int i=in.read();
System.out.print((char)i);
System.out.print("* ");

}//while
}//try
catch(IOException e){
System.out.println(e);
}//catch
System.out.println();
}//mb_echo
public static void main(String[] args){
mb_echo(System.in);
}
}//InpurEcho

输入“1回车”后输出如下:
1*
*
*

为什么会多出最后两个 * 符号的?求大神们解答。。。
展开
 我来答
198901245631
推荐于2018-03-30 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1737万
展开全部
read方法是读取的字节流,也就是每次只能读取一个字节,如果是汉字的话,肯定会出现乱码,此时必须用readline方法来整行读取,大大的提高了读取效率。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
李磊_1
推荐于2016-09-09 · TA获得超过299个赞
知道小有建树答主
回答量:337
采纳率:66%
帮助的人:120万
展开全部
楼上没错,后面两个分别是“回车符+星号”和“换行符+星号”,原因是in.read(),每次只读取一个字符,而回车其实是'\r\n'两个字符组成的,所以in读取了两次,你可以继续输入回车键,你会发现每输入一次,就会多出两行,并且每行有一个*。
来自:求助得到的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天方之夜谭
2013-03-01 · TA获得超过587个赞
知道小有建树答主
回答量:223
采纳率:100%
帮助的人:207万
展开全部
你是在windows下做的程序吧,后面两个分别是“回车符+星号”和“换行符+星号”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
驻云客
2013-03-01 · TA获得超过977个赞
知道小有建树答主
回答量:577
采纳率:0%
帮助的人:339万
展开全部
回车分解成两个字符并被输出成空
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式