IO流


                                                              IO

   按照我的个人理解: File类文件操作是在外部改变文件的,而IO流是从内部改变文件的。总之两者都是为了改变文件而生的。

   IO流的使用方法与一般的类相似,先创建对象。 InputStream ins = new FileInputStream();

因为InputStream 是抽象类,所以要用子类的构造方法来创建对象。(利用了自动转型).

InputStream 之中最常用的方法有

  int available(): 可以读取的有效字节长度。  返回文件内容中的字节数

  int read(): 返回流中的下一个字节作为byte值(一般可以理解为读取了一个字符,返回的是该字符的ASCII码 值)  如果已经读到了流的末尾,则会返回-1.

  int read(btye[] b): 用从流中读到的数据都输入到byte数组b中。  (感觉知道这个方法之后,想要直接将流中的数据读入到数组中就方便多了)

 

InputStream 相对应的OutputStream 中常用的方法有

  void write(byte[] b): byte数组中的内容输入到流中。

  void wirte(int b) :向流中写入一个byte值(b虽然是int型,但是写入的时候是当做一个字节来写入,如果b的值不在0~255之间,那么就将b加上或者减去256的整数倍,使得运算后的值在0~255之间,再来写入)

 

 

 

  读写文件:实现将一个文件读取到程序中,再将文件写入到硬板里面。(相当于是实现了一个文件复制的功能)。

   解决这个问题一般有两种方式。一个是用字节流,还有一个是用缓冲流(BufferedInputStream BufferedOutputStream)。

虽然两者读和写的操作都是对一个字节进行的,也就是说每次都只能读取一个字节或者是写入一个字节。但是两者的效率却是相去甚远。

       不多说,直接上图(注意:我要拷贝的是一个大小为40M的文件):

 

 

 

 

 

 

  实践可以证明,这两个流的效率相差的确实不是一点两点,那么都是读写一个字节,这两差距咋就这么大嘞?  其实,这还要追究到一个字节从读取到写入的具体过程。

   就是用字节流一个字节的读写过程要(以文件为例)经过以下几个过程:

文件(硬盘)-à操作系统内存-à虚拟机内存-à程序的变量-à虚拟机内存-à操作系统内存-à文件(硬盘)。

  而缓冲流的话会再虚拟机内存中开辟一定大小的缓存区,每次读写的数据都会先存在缓存区当中,当缓存区满了之后再将数据一起进行写入,这样的话整个操作效率就高多了。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值