A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

read方法为什么返回值类型是Int不能是byte呢?
上课老师只是强调这一点  我们也这样做 但为什么啊?

6 个回复

倒序浏览
返回的是所读取的字符在Unicode中的值,如:当读到A是返回65,当读到末尾是返回-1

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
返回的是unicode中与读取字符对应的值,不是 0 1 代码 这种形式

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
read返回的是读取的字节数.......要取到到一个 int 类型下的 -1 来表示数据流的末尾

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
一直很安静 来自手机 中级黑马 2013-11-14 09:51:32
报纸
如果是byte那么如果读到某子字节是11111111她的十进制是-1读到这里本不该停但是了。把它转为int、在1111111前面补上0。write方法在将这些0去掉。这样即保证数据和原来一样,也避免读到11111111的时候不该停止但是停止了

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
  1. import java.io.FileInputStream;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;

  5. public class ReadMethodDemo {

  6. public static void main(String[] args) throws IOException {
  7.   FileReader fr = new FileReader("src.txt");
  8.   fr.read();   

  9.                              
  10.   /*
  11.    * 如果返回char, 那么无法表示流末尾.
  12.    * char的取值范围是从0到65535
  13.    * 这个范围内的所有字符, 都有可能在数据中出现
  14.    * 我们需要使用一个不可能在数据中出现的值来表示流末尾
  15.    * 那么Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现
  16.    * 而为了返回-1, 那么只能用int
  17.    * 当流中读取到一个字符时, read()方法内部就会当作int返回, 如果读到流末尾, 直接返回-1
  18.    */
  19.   
  20.   FileInputStream fis = new FileInputStream ("src.jpg");
  21.   //fis.read();     

  22.                           
  23.   int b;
  24.   while((b = fis.read()) != -1)
  25.    System.out.println((byte)b);               //打印的结果全是正数
  26.   
  27.   /*
  28.    * 如果返回byte, 同样无法表示流末尾.
  29.    * byte的取值范围是从-128到127
  30.    * 这个范围内所有的数据, 都有可能在数据中出现
  31.    * read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复
  32.    *
  33.    * 字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97
  34.    * 字节流中不能这么做, 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数据了
  35.    *
  36.    * read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数
  37.    * 这时就可以用-1表示流末尾了
  38.    * 而改变后的数据只要强转回byte, 就可以得到原有数据
  39.    */
  40. }

  41. }


复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
因为音频视频和图片都是用字节数据表示的,在其中难免出现-1这样的数据,如果返回字节出现了-1,就无法再继续了,因为我们定义循环都是以-1为结束标记,所以针对这种情况处理方式就是,在8位的字节数据前面补上24个0,让其变成int数据,这样就可以一直读下去,即使遇到-1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马