IO流的字节流InputStream、OutputStream

字节流可以操作非文本数据,方法原理与字符流的类似,只是字符流用的是字符数组,字节流用的是字节数组。
InputStream子类FileInputStream读文件
OutputStream子类FileOutputStream写文件

一、FileOutputStream写文件
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abdskaf".getBytes());           //getBytes()将字符串变成字节数组
//不需要刷新,字节流的字节可以单个操作,有一个字节就处理一个字节,对字节最小单位的操作,不需要做转换。
//而字符流,例如中文,需要读取两个字节,然后查编码表,最后处理,所以需要刷新流资源。
fos.close();     //这个需要写,虽然不具有刷新的功能,但是要关闭流资源


二、FileInputStream读文件
//读取文件方式一:一个一个地读
public static void readFile_1() throws IOException{
    FileInputStream fis = new FileInputStream("fos.txt");
     int ch =0;
    while( ( ch = fis.read() ) !=-1 ){
         System.out.println( (char)ch );
     }
    fis.close();
}
//读取文件方式二:
public static void readFile_2() throws IOException{
    FileInputStream fis = new FileInputStream("fos.txt");
    byte[] buf = new byte[1024];
     int len=0;
    while( ( len = fis.read(buf) ) !=-1 ){
         System.out.println( new String(buf,0,len) );
     }
    fis.close();
}
//读取文件方式三:字节流特有的方法aviable(). 
public static void readFile_3() throws IOException{
    FileInputStream fis = new FileInputStream("fos.txt");
    int num = fis.aviable();
    byte[] buf = new byte[num]; //定义一个刚刚好的缓冲区,不用再循环了
    fis.read(buf);
    System.out.println( new String(buf) );
    fis.close();
}               
第三种读取方式的弊端,如果处理的是一个很大的媒体对象,需要很大的内存,不建议使用创建一个刚刚好的缓冲区。


三,图片的拷贝
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读写,完成数据的存储。
4.关闭资源
public static boid main(String[] args){
   FileOutputStream fos = null;
   FileInputStream  fis = null;
    try{
        fos = new FileOutputStream();
        fis = new FileInputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while( (len = fis.read() )!=-1){
                fos.write(buf,0,len);
        }
   }catch(IOException e){
        throw new RuntimeException("复制文件失败");
   }finally{
        try{
             if(fis!=null) fis.close();
        }catch(IOException e){
              throw new RuntimeException("读取关闭失败");
        }
       try{
             if(fos!=null) fos.close();
        }catch(IOException e){
              throw new RuntimeException("写入关闭失败");
        }
   }
}

四、通过字节流的缓冲区完成复制BufferedInputStream 、BufferedOutputStream
BufferedInputStream bufis = new BufferedInputStream(newFileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(newFileOutputStream("c:\\1.mp3"));
int by = 0;
while( by = bufis.read() !=-1 ){
    bufos.write(by);
}
bufos.close();
bufis.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值