黑马程序员_IO输入输出流

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
IO是java基础中最重要的部分之一, 开始认真的对其学习.

从整体来看, IO流是用来处理设备之间的数据传输用的,流按照输入方式分为输入流和输出流,按照数据类型分为字符流和字节流,分别有4个基类,字符流的2个基类是Reader和Writer,字节流的基类分别是InputStream和OutputStream,计算机中的数据都是以字节的形式存在,可处理图片,多媒体,文档等多种形式的文件,字符流主要是为了处理文本文档用的,因此从字节流出发,进行IO的学习.

输入流是InputStream,是一个接口,不能创建实例对象,因此找到他的子类对象对其操作,对文件的操作选择FileIn-putStream,输入流是对文件进行读入操作,即read();初学时易进入误区,认为这是向外读出的操作,与输出流Output-Stream相混淆,用一张小图进行阐述:已有文件从硬盘上读进内存中,这个内存小人用眼睛和手接收数据,进入内存处理后,内存小人又将数据写出去,送到下一个硬盘中.

通过对字节流的输入输出双向操作可拷贝到不同的路径中,有4中方式,但他们的效率不一样,且各有优缺点.

第一种是读入写出都按一个字节一个字节,代码相对简单,但是传输效率最慢,不建议采用.

第二种是自己定义一个字节数组,自定义字节数组的长度,这样在传输时会按我们给定的长度先在硬盘上存储数据,在交给内存,输出时原理也一样,这样就大大的增快了传输效率,如代码:

private static void IO3() throws FileNotFoundException, IOException {
FileInStreamout = new FileInputStream("kk.mp3"); //输入流,传入已有文件路径
FileOutputStreamout = new FileOutputStream("kk.mp3"); //输出流,是目的文件
byte [] b = new byte[1024]; //创建一个存1024个字节的数组
int len=0; //用int型len记录字节长度
while((len=in.read(b))!=-1){ //判断未读到最后一个字节,就对其循环遍历
out.write(b,0,len); //从数组b中写出,从0角标开始,写到长度为len时结束
}
in.close(); //关闭输入流资源
out.close(); //关闭输出流资源
}

第三种是创建数组后指定数组长度为avaiable(),它可以指定为当前文件的长度,但如果该文件的所占内存超出,用它就会溢出内存,因此也不建议用这种.

第四种是用方法BufferedInputStream和BufferedOutputStream,这是字节流的缓冲区,里面封装了字节数组的对象,减少了代码量.

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值