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方式算字节数? 展开
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方式算字节数? 展开
展开全部
我们都知道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,也就是说如果我们直接读出来这个值可能就是不对了。
首先我先简单解释下符号扩展,这是指由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,也就是说如果我们直接读出来这个值可能就是不对了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的输入被读取的其实是 : 123456789回车(!!!!)
觉得有疑问,可以用输出语句,输出数组:System.out.println(Arrays.toString(b));
会发现1-9之后还有一个13,即ascii码中的回车。
觉得有疑问,可以用输出语句,输出数组:System.out.println(Arrays.toString(b));
会发现1-9之后还有一个13,即ascii码中的回车。
更多追问追答
追问
这么说,read方法返回的是读入的字符数了,不是按照unicode字符集那样,一个字符算2个字节
追答
in.read(b);
返回的是b中的字节总数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unicode字符集 而 read方法是字节流的方法!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我跑你这程序出的是输出11
因为回车 后面还需要 跟一个换行副,你试下 xx,x,x....10,13
因为回车 后面还需要 跟一个换行副,你试下 xx,x,x....10,13
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询