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

intcount;byte[]b=newbyte[256];BufferedInputStreamin=newBufferedInputStream(System.in)... 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方式算字节数?
展开
 我来答
yaoyue1019
2015-07-24 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部
inputstream的read函数 在很多地方都有用到 比如键盘输入或文件流输入或socket输入
read的返回值 并不是真正得到的数据,而是得到的数据的长度
你每次会希望读入一定的长度,比如你想读10个byte 如果剩余的byte数足够,将会读满所需要的字节数,如果剩余的字节数不够 将会返回一个小于你所读的数 如果读到-1 表示读取结束(经常在socket和文件读取遇到)
Hanann6
2015-07-14 · TA获得超过464个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:98.9万
展开全部
我们都知道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,也就是说如果我们直接读出来这个值可能就是不对了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TiooBeoo
2013-02-28 · TA获得超过542个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:270万
展开全部
你的输入被读取的其实是 : 123456789回车(!!!!)

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

会发现1-9之后还有一个13,即ascii码中的回车。
更多追问追答
追问
这么说,read方法返回的是读入的字符数了,不是按照unicode字符集那样,一个字符算2个字节
追答
in.read(b);
返回的是b中的字节总数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
love爱有缘
2013-02-28 · TA获得超过1041个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:695万
展开全部
unicode字符集 而 read方法是字节流的方法!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黑暗的那一束光
2013-03-28
知道答主
回答量:6
采纳率:0%
帮助的人:7683
展开全部
我跑你这程序出的是输出11
因为回车 后面还需要 跟一个换行副,你试下 xx,x,x....10,13
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式