java流的read方法返回值怎么来的?

int count;
byte[] b=new byte[256];
BufferedInputStream in=new BufferedInputStream(System.in);
try{
count=in.read(b);
System.out.println("读入的字节数为:"+count);

运行,输入:123456789
输出:10
请问下,这个10怎么来的,read(byte b[])方法是返回实际读入的字节数,怎么不是按unicode方式算字节数?

inputstream的read函数 在很多地方都有用到 比如键盘输入或文件流输入或socket输入
read的返回值 并不是真正得到的数据,而是得到的数据的长度
你每次会希望读入一定的长度,比如你想读10个byte 如果剩余的byte数足够,将会读满所需要的字节数,如果剩余的字节数不够 将会返回一个小于你所读的数 如果读到-1 表示读取结束(经常在socket和文件读取遇到)
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-14
我们都知道java中io操作分为字节流和字符流,对于字节流,顾名思义是按字节的方式读取数据,所以我们常用字节流来读取二进制流(如图片,音乐 等文件)。
首先我先简单解释下符号扩展,这是指由byte向上转化成更宽的类型时,是扩展的符号位。这对于正数补0,负数补1,例如,定义byte b = -1;在计算机内部它是用八位1111 1111表示的,当扩展成32位整型的时候,一般情况下是1111 1111 1111 1111 1111 1111 1111 1111,即符号扩展,而对于无符号扩展,也称为0扩展,其结果是0000 0000 0000 0000 0000 0000 1111 1111(实际上这样一来值已经变成255了)。过于向上转型和强制向下转型的进一步讨论,我在以后再说。这里要说的是我们能从java源码中得到的第二 个信息,即上面的注释部分,read()方法的最后一行把读到的字节0扩展成了int,也就是说如果我们直接读出来这个值可能就是不对了。
第2个回答  2013-02-28
你的输入被读取的其实是 : 123456789回车(!!!!)

觉得有疑问,可以用输出语句,输出数组:System.out.println(Arrays.toString(b));

会发现1-9之后还有一个13,即ascii码中的回车。追问

这么说,read方法返回的是读入的字符数了,不是按照unicode字符集那样,一个字符算2个字节

追答

in.read(b);
返回的是b中的字节总数。

追问

那按一个字符两个字节算的话,不是应该是20么?

追答

这是对单个数字逐一读取,不是读取数值,单个数字和字母占一个字节,汉字占两个字节。

本回答被提问者采纳
第3个回答  2013-02-28
unicode字符集 而 read方法是字节流的方法!!!
第4个回答  2013-03-28
我跑你这程序出的是输出11
因为回车 后面还需要 跟一个换行副,你试下 xx,x,x....10,13

java中reader.read()方法返回的int值是怎样得到的?
当 `Reader.read()` 方法执行时,它从流中读取字节,并根据当前的字符编码进行解码。如果读取成功,方法将返回解码得到的字符的 Unicode 值。如果流已结束,则返回 -1。返回的值通常是一个介于 0 到 65535 之间的整数,这对应于 Java 使用的内部编码(UCS-2),它支持大部分 Unicode 字符。要将返...

java流的read方法返回值怎么来的?
read的返回值 并不是真正得到的数据,而是得到的数据的长度 你每次会希望读入一定的长度,比如你想读10个byte 如果剩余的byte数足够,将会读满所需要的字节数,如果剩余的字节数不够 将会返回一个小于你所读的数 如果读到-1 表示读取结束(经常在socket和文件读取遇到)...

javaio文件流read方法返回-1?
接下来,以Linux为例,解释在不同情况中EOF是如何出现的。首先,对于普通文件(file),当文件读取完毕,read方法将返回-1,表示EOF状态。其次,针对标准输入(stdin),当没有更多的输入数据时,read方法同样会返回-1。最后,对于网络流(socket),在没有接收到数据或连接关闭后,read方法也会返回-1,...

Java中字节流和字符流的read()方法为什么返
read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复 字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97 字节流中不能这么做, 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的...

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

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

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

java中的Reader类中的read方法返回值为什么是个int类型的?
1. 在Java中,`Reader`类中的`read`方法返回`int`类型是为了能够表示字符流末尾的特殊情况。2. 如果我们使用`char`类型来表示,由于`char`的取值范围是从0到65535,Java需要一个值来表示流结束,这个值不应该在数据中出现。3. 因此,Java选择使用-1来表示流的末尾。由于-1不会是字符数据的一部分...

在Java中的io流中,read读取文件时,读取完了没有了返回-1,(为什么不...
返回-1是对的啊,read字节数组的时候,读到最后一个没有的时候就数组越界异常,-1就是不在数组的索引值范围内,所以开发人员就将它作为read完成后的返回值

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

相似回答