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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jacky_Chen1990 高级黑马   /  2013-5-14 01:07  /  2322 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Jacky_Chen1990 于 2013-5-14 01:14 编辑

在经过一个小时的整理之后,新鲜出炉的知识点和代码和大家见面了。希望大家吃的可口。我也要睡觉去了。。。


ok 夜宵大餐送上。

申明这些东西大部分都是自己手打出来的,如果有问题,还希望大家可以提出来,为了我们的后代着想。。哦不。是后人。顶一个 不会怀孕哦。~



字节流知识点整理

字节流的老大:InputStream,OutputStream.两者都是抽象的。

这两位老大,都年事已高了,自然需要一些年轻人来干事。


以下列出常见的字节流类。

InputStream 下:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
OutputStream下:
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream


这里我只介绍FileInputStream 以及FileOutputStream的相关知识点。



首先看一下他们的一些常用方法,所谓砍柴不误磨刀工。你没筷子吃什么饭,用手么。原始人了么。。。。


1. FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。
a)        首先是构造方法



b)        FileInputStream的常用方法,继承的一些方法不再赘述。



2. 文件输出流是用于将数据写入File 或FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
a)        首先是构造方法

b)        FileOutputStream的常用方法,继承的一些方法不再赘述。


这里容我直接上代码,这样大家可以更好地理解这些知识点。{:soso_e151:}

A)     复制图片 ps:这里只写主要方法,不附全部代码。
  1.   
  2.    //这里的方法是读一个字节,写入一个字节,效率是最低的。
  3.    public static void copy_pic_1() throws Exception {
  4.      FileInputStream fis = new FileInputStream(new File("F:\\pic\\1.JPG"));
  5.      FileOutputStream fos = new FileOutputStream(new File("F:\\1_copy.jpg"));
  6.    
  7.      int read = 0;
  8.      while((read=fis.read())!=-1) {
  9.         fos.write(read);
  10.      }
  11.    
  12.      fos.close();
  13.       fis.close();
  14.    }
  15.   
  16.    //通过字节数组进行读取和写入操作,效率较高。
  17.    public static void copy_pic_2() throws Exception {
  18.      FileInputStream fis = new FileInputStream(new File("F:\\pic\\1.JPG"));
  19.      FileOutputStream fos = new FileOutputStream(new File("F:\\1_copy.jpg"));
  20.    
  21.      int len = 0;
  22.      byte[] buf = new byte[1024];
  23.    
  24.      while((len=fis.read(buf))!=-1) {
  25.         fos.write(buf, 0, len);
  26.      }
  27.      fos.close();
  28.      fis.close();
  29.    }
  30. }
复制代码
B)     复制MP3 ps:这里只写主要方法,不附全部代码。
  1.   
  2.    public static void copyMP3_1() throws IOException{
  3.      BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("C:\\0.mp3"));
  4.      BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("D:\\1.mp3"));
  5.    
  6.      int read = 0;
  7.    
  8.      while((read=bufis.read())!=-1) {
  9.         bufos.write(read);
  10.      }
  11.    
  12.      bufos.close();
  13.      bufis.close();
  14.    }
  15.   
  16.    public static void copyMP3_2() throws IOException{
  17.      BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("C:\\0.mp3"));
  18.      BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("D:\\1.mp3"));
  19.    
  20.      int len=0;
  21.      byte[] buf = new byte[1024];
  22.    
  23.      while((len=bufis.read(buf))!=-1) {
  24.         bufos.write(buf,0,len);
  25.      }
  26.    
  27.      bufos.close();
  28.      bufis.close();
  29.    }

  30. }
复制代码
C)      自定义缓冲区来实现MP3的复制 ps:这里只写主要方法,不附全部代码。

主要问题,已经有所注释了。

  1. class MyBufferedInputStream{
  2.    private InputStream in;
  3.    private byte[] buf = new byte[1024];
  4.   
  5.    private int pos = 0,count = 0;
  6.   
  7.    MyBufferedInputStream(InputStream in){
  8.      this.in = in;
  9.    }
  10.   
  11.    //一次读一个字节,从缓冲区(字节数组)获取。
  12.    public int myRead() throws IOException {
  13.      //通过in对象读取硬盘上数据,并存储到buf中
  14.      if(count == 0) {
  15.         //读取第一此后,count=1024,buf数组中装了读入的数据
  16.         count = in.read(buf);
  17.         //System.out.println(count);
  18.         if(count<0)
  19.           return -1;
  20.         pos = 0;
  21.         byte b = buf[pos];
  22.       
  23.         count--;
  24.         pos++;
  25.       
  26.         //这是为了防止出现-1的产生,b是byte型的,而返回的是int,所以需要与的操作。
  27.         //具体的说:需要将byte提升到int类型,需要将原来的byte&255,就得到了需要的数据。
  28.         //总结的说就是讲byte的一个字节,提升为Int的4个字节。
  29.         return b&255;
  30.      } else if(count>0) {
  31.         //count=1023后,一直在将数据装入,并且count--,指针pos++
  32.         byte b = buf[pos];
  33.         count--;
  34.         pos++;
  35.         return b&0xff;//oxff是255的16进制形式。
  36.      }
  37.      return -1;
  38.    }
  39.    public void myClose() throws IOException {
  40.      in.close();
  41.    }
  42. }
复制代码
知识点到此就结束了。


这里再送上技术分的快速得分法门,希望可以帮助你早日得道!
技术分,你让我又爱又恨~~~


评分

参与人数 1技术分 +2 收起 理由
袁梦希 + 2 很给力!

查看全部评分

13 个回复

倒序浏览
你这写的不错,能看的出是自己整理的,值得给2技术分,继续努力吧,曹7分的活动没有白弄。挺好的
回复 使用道具 举报
还需要用论坛搜索功能找到字节流的相关帖子,提取出问题、和解决办法。这个你还做不?
回复 使用道具 举报
曹睿翔 发表于 2013-5-14 06:54
还需要用论坛搜索功能找到字节流的相关帖子,提取出问题、和解决办法。这个你还做不? ...

嗯,必须做
回复 使用道具 举报
袁梦希 发表于 2013-5-14 01:19
你这写的不错,能看的出是自己整理的,值得给2技术分,继续努力吧,曹7分的活动没有白弄。挺好的 ...

嗯,谢谢支持哈。
回复 使用道具 举报
{:soso_e179:}
回复 使用道具 举报
神之梦 发表于 2013-5-14 08:41

谢谢你的大拇指哈:lol
回复 使用道具 举报
真心狠给力,加油!
回复 使用道具 举报
朱晓杰 发表于 2013-5-14 13:16
真心狠给力,加油!

你的墨镜更给力哦,还有两条粗粗的小新眉毛么~~哈哈~~~
回复 使用道具 举报
Jacky_Chen1990 发表于 2013-5-14 17:52
你的墨镜更给力哦,还有两条粗粗的小新眉毛么~~哈哈~~~

:L   不要观察的这么仔细么
回复 使用道具 举报
朱晓杰 发表于 2013-5-14 20:00
不要观察的这么仔细么

可是你真的很有喜感啊。。。哈哈,你是准备参加20期吗?
回复 使用道具 举报
Jacky_Chen1990 发表于 2013-5-14 23:50
可是你真的很有喜感啊。。。哈哈,你是准备参加20期吗?

:L   好吧,我参加的是物联云
回复 使用道具 举报
朱晓杰 发表于 2013-5-15 13:33
好吧,我参加的是物联云

嘿嘿,莫怪拉。
回复 使用道具 举报
Jacky_Chen1990 发表于 2013-5-15 13:58
嘿嘿,莫怪拉。

不会了,挺幽默的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马