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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 HM朱蛟 于 2013-4-16 02:10 编辑

请问为什么和老师的实验现象不同呢?
我弄来弄去第一个字符都是73,老师的却是-1.
老师视频截图我发上来拉,是【黑马程序员_毕向东_Java基础视频教程第19天-14-IO流(自定义字节流的缓冲区-read和write的特点).avi】里的一个实验。
先谢各位。{:soso_e100:}

代码如下
  1. import java.io.*;

  2. class Run
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);   
  7.         }           

  8.         public static void main(String[] args) throws IOException
  9.         {        
  10.                         long start = System.currentTimeMillis();//计时器
  11.                         copy_2();
  12.                         long end = System.currentTimeMillis();//计时器
  13.                   sop(start-end+"毫秒");
  14.         }

  15.         public static void copy_2()throws IOException
  16.         {
  17.                 MyBufferedInputStream bufis = new MyBufferedInputStream(new FileInputStream("c:\\1.mp3"));
  18.                 BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\3.mp3"));
  19.                
  20.                 int by = 0;

  21.                 System.out.println("第一个字节:"+bufis.myRead());//为什么这里输出结果不是-1?

  22.                 while((by=bufis.myRead())!=-1)
  23.                 {
  24.                         bufos.write(by);
  25.                 }

  26.                 bufos.close();
  27.                 bufis.myClose();
  28.         }
  29. }

  30. class MyBufferedInputStream
  31. {
  32.         private InputStream in;

  33.         private byte[] buf = new byte[1024*4];
  34.                
  35.         private int pos = 0,count = 0;
  36.         
  37.         MyBufferedInputStream(InputStream in)
  38.         {
  39.                 this.in = in;
  40.         }

  41.         //一次读一个字节,从缓冲区(字节数组)获取。
  42.         public int myRead()throws IOException
  43.         {
  44.                 //通过in对象读取硬盘上数据,并存储buf中。
  45.                 if(count==0)
  46.                 {
  47.                         count = in.read(buf);
  48.                         if(count<0)
  49.                                 return -1;
  50.                         pos = 0;
  51.                         byte b = buf[pos];

  52.                         count--;
  53.                         pos++;
  54.                         return b;
  55.                 }
  56.                 else if(count>0)
  57.                 {
  58.                         byte b = buf[pos];

  59.                         count--;
  60.                         pos++;
  61.                         return b;
  62.                 }
  63.                 return -1;

  64.         }
  65.         public void myClose()throws IOException
  66.         {
  67.                 in.close();
  68.         }
  69. }
复制代码

我的运行结果.png (15.89 KB, 下载次数: 4)

ME

ME

老师的运行结果.png (237.03 KB, 下载次数: 3)

TEACHER

TEACHER

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
不知道是代码错误还是我电脑环境的错误呢~?{:soso_e132:}
回复 使用道具 举报
本帖最后由 杨玄文 于 2013-4-14 22:33 编辑

把你的主函数改成我这样试试


public static void main(String[] args) throws IOException
        {
                long start = System.currentTimeMillis();
                copy_2();
                long end = System.currentTimeMillis();

                System.out.println((end-start)+"毫秒");
        }


end-start,而不是你写的start-end


还有下面的
                        count--;
                        pos++;
                        return b&255;//只留最后8位


                        count--;
                        pos++;
                        return b&0xff;//取二进制的最低16位


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
杨玄文 发表于 2013-4-14 22:25
把你的主函数改成我这样试试

谢谢同学的指点
但是还是没解我疑惑呀   我主要是疑惑为什么毕老师在当前代码下第一个字符是-1   而我弄死都是73呢
包括我后面进行了与运算后 MP3拷贝成功了 该程序的第一个字符还是73  有点纳闷:#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马