黑马程序员__关于学习IO流中的字节流的总结

             ------- android培训java培训、期待与您交流! ----------

在文件操作中,对于文本内容不是字符的文件,例如图片,影音等媒体文件,对这些文件的操作就不能用字符流,需要用字节流!

 

FileInputStream类,包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。

FileInputStream类本身只是简单地重写那些将所有请求传递给所包含输入流的InputStream的所有方法。FileInputStream的子类

可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

构造函数要传入一个要操作的文件对象FileInputStream(File file)

读字节方法:

     read() 从此输入流中读取一个数据字节

     read(byte[] b)从此输入流中将最多 b.length 个字节的数据读入一个字节数组中

     read(byte[] b, int off, int len)从此输入流中将最多 len 个字节的数据读入一个字节数组中

有一个特别的一个方法:available()   返回值是int类型, 作用是返回可以不受阻塞地从此文件输入流中读取的字节数,就是要操作的文件的总字节数,好处是当你需要定义一个字节数组要接收读取的内容时,并不能知道数组的容量是多少,有了这个方法,就可以清晰的定义容量为此方法的返回值。但是当一个文件足够大的时候,而Java虚拟机中的内存并没有那么大,超出内容会出现错误,所以在文件很大的时候并不适合这样使用。

 

FileOutputStream类,用于写入诸如图像数据之类的原始字节的流

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


此类的构造函数和读取类差不多,也需要传入一个或者说一个从新创建的文件对象。

写字节方法:

     write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中

     write(byte[] b, int off, int len)将指定字节数组中从偏移量 off 开始的len 个字节写入此文件输出流

     write(int b)将指定字节写入此文件输出流

当写入一个或一组字节之后,FileWriter对象往往需要用flush()方法刷新一下缓冲区,但此类并不需要刷新,就直接写入文件中,但是程序结束后还要关闭流对象释放资源。

 

下面是一个复制图片文件的例子:

       

import java.io.*;
class CopyPic{
    public static void main(String args[]){
        FileOutputStream fos = null;
        FileInoutStream fis = null;
        try{
            fis = new FileInputStream("1.jpg");
            fos = new FileOutputStream("2.jpg");
            byte[] buf = new byte[fis.available()];  //当文件比较大的时候不建议用此方法
            int len = fis.read(buf);
            if(len!=-1)
                fos.write(buf);
        }catch(IOException e){
            throw new RutimeException("复制失败");
        }finally{
            try{
                if(fis!=null)
                    fis.close();
            }catch(IOException e){
                throw new RutimeException("读取关闭失败");
            }finally{
                 try{
                     if(fos!=null)
                         fos.close();
                 }catch(IOException e){
                     throw new RutimeException("写入关闭失败");
                 }
            }
        }
    }
}



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值