黑马程序员——黑马学习日志之十三 IO流(二)

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

黑马学习日志之十三 IO流(二)

字节流

字符流 底层实际是字节数据 有对应的码表 主要操作文本

字节流 操作数据都是字节数据 可以操作图片等

字节流基类:InputStream     OutputStream 

字符流使用的是字符数组 字节流使用的是字节数组

例子:
import java.io.*;
class FileStream
{
  public static void main(String [] args )throws IOException{
   readFile3();
  }
 public static void readFile1()throws IOException{//字节流特有方法
   FileInputStream fis = new FileInputStream("fos.txt");
   byte[] buf = new byte[fis.available()];//算是字节的长度 此处注意如果文本中有回车的话 占两个字节

                                         //慎用,如果文件过大,会内存损坏
    int len=0;
   while ((len=fis.read(buf))!=-1)
   {
   System.out.println(new String(buf,0,len));
  }
  fis.close();
 } 
  public static void readFile2()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();
 }
 public static void writeFile()throws IOException{
   FileOutputStream fos = new FileOutputStream("fow.txt");
   fos.write("abcde".getBytes());//字符串变成字节数组 字符串变成字符数组是 //toCharArray()方法
   //此处和字符流的区别是 没有刷新 字符流是将半个字节先临时存储 然后再查表  //需要缓冲
   //字节如果没有操作缓冲区时 它是不需要刷新 可以参考源码 有缓冲区才刷新了
   fos.close();//虽然没有刷新 但是必须要关闭资源
 }
}

2 Copy图片

思路
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读写,完成数据的存储
4.关闭资源
import java.io.*;
class CopyPic
{
 public static void main(String [] args){
 
   FileOutputStream fos = null;
   FileInputStream fis = null;
   try
   {
    fos= new FileOutputStream("D:\\2.bmp");
    fis= new FileInputStream("D:\\1.bmp");

    byte [] buf = new byte[1024];
    int len = 0;
    while ((len=fis.read(buf))!=-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("写入文件失败");
    }
   }
 }
}

字符流也可以复制图片,但是操作后的图片可能打不开。

字节流缓冲区

BufferedOutputStream
BufferedInputStream

Copy Mp3文件
import java.io.*;
class CopyMp3
{
 public static void main(String [] args)throws IOException{
   long start = System.currentTimeMillis();
   copy_1();
   long end = System.currentTimeMillis();
   System.out.println((end-start)+"毫秒");
  }

  //通过字节流的缓冲区完成复制
  public static void copy_1()throws IOException{
   BufferedInputStream bufis = new BufferedInputStream(new  FileInputStream("D:\\1.mp3"));
   BufferedOutputStream bufos = new BufferedOutputStream(new  FileOutputStream("D:\\2.mp3"));

   //缓冲区中封装着数组就不需要设置数组了
   int by = 0;
   while ((by=bufis.read())!=-1)
   {
    bufos.write(by);
   }
  bufos.close();
   bufis.close();
 }
}

 


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值