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

程序如下:

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*
*
*

为什么会多出最后两个 * 符号的?求大神们解答。。。

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
楼上没错,后面两个分别是“回车符+星号”和“换行符+星号”,原因是in.read(),每次只读取一个字符,而回车其实是'\r\n'两个字符组成的,所以in读取了两次,你可以继续输入回车键,你会发现每输入一次,就会多出两行,并且每行有一个*。来自:求助得到的回答本回答被提问者采纳
第1个回答  推荐于2016-09-09
你是在windows下做的程序吧,后面两个分别是“回车符+星号”和“换行符+星号”
第2个回答  2013-03-01
回车分解成两个字符并被输出成空

Java:为什么InputStream.read()读取一个byte却返回一个int呢?
当读取的是数字和英文时,返回值是对应的ascii码,当读取的是汉字时,返回的是汉字的机内码,比如你用的GBK编码方式,返回的就是GBK的内部编码,read()方法每次从inputstream中读取一个字节,而一个字节是8位,能2的八次方个数,也就是256,这也是read()返回0~255之间的数的原因。而asc是没有...

JAVA. FileInputStream 的 read()方法一次读取一个字节并返回 那返回...
我们需要使用一个不可能在数据中出现的值来表示流末尾, Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现,如果返回byte, 同样无法表示流末尾., byte的取值范围是从-128到127,这个范围内所有的数据, 都有可能在数据中出现,read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和...

java的输入流的read方法返回的是什么呢?
read(bytes)返回的是个整数,是每次填充给bytes数组的长度。这个方法在按bytes数组读取文件。不等于-1是因为出现-1就说明文件已经读取结束了。可以通过这个方法,进行循环读取文件内容,当read返回值为-1的时候,表示文件读取完毕,就可以显示文件内容,进行相应的操作。

java流的read方法返回值怎么来的?
inputstream的read函数 在很多地方都有用到 比如键盘输入或文件流输入或socket输入 read的返回值 并不是真正得到的数据,而是得到的数据的长度 你每次会希望读入一定的长度,比如你想读10个byte 如果剩余的byte数足够,将会读满所需要的字节数,如果剩余的字节数不够 将会返回一个小于你所读的数 如果读到...

Java 中 InputStream 类中方法 read() 的使用问题
你好,read方法是按一个字节一个字节的读,它读取的时候,有一个想游标一样的东西,首先指向流的最开头 当read到-1的时候,表示读取到了流的最后面,表示已读取完毕

关于java.io包中,FileInputStream 的read()方法
public int read() throws IOException 从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。指定者:类 InputStream 中的 read 返回:下一个数据字节;如果已到达文件末尾,则返回 -1。抛出:IOException - 如果发生 I\/O 错误。个人理解:该方法将输入按字节读入,当读取到字节时就返回...

字节流判断读到流末尾的标记是什么以及他的返回值为什么是0-255_百 ...
read()方法的返回值虽然是int,但这么理解是不好的,read()方法的返回值是InputStream的下一个字节,只是放在int的最后一个字节里。通常这个字节的int值,只要不是-1,没人会关心的。255的原因不是什么符号位的问题,只是一个int如果只有最后一个字节有效而其他都是0的话,范围就是0-255。"\\r"和...

java中的FileInputStream类中的read()方法是读取一个数据字节,那么读取...
read只会读取一个字节 不会自动读取下一个 只会读第一个字节 和指针不是一回事 如果想用字节流读完文件 一般用一个字节数组的缓冲区 比如200 byte[] buffer = new byte[200];\/\/创建字节数组 int length = 0;while(-1 != (length = is.read(buffer, 0, buffer.length))){ String str =...

java读取文件时,InputStream的read(byte[])方法的byte[]的长度不知...
那个长度应该只是缓冲区而已,应该不影响结果的。我做的时候一般都设置为1024,即1KB 这个是我部分的成功代码 inputStream = new BufferedInputStream(new FileInputStream(downloadFile));outputStream = new BufferedOutputStream(response .getOutputStream());byte[] buffer = new byte[1024];int read...

...用输入流打印出来 用in.read()方法怎么实现
应该可以 -1是read()方法的返回值。比如下面的代码:byte[] by=new byte[1024];FileInputStream filein=new FileInputStream("考场规则.txt");FileOutputStream fileout=new FileOutputStream("新生成.txt");while(filein.read(by)!=-1){ fileout.write(by);\/\/ fileout.write("\\n");...

相似回答