• InputStream中的read方法


    • int read() :

      1.从读取流读取的是一个一个字节

      2.返回的是字节的(0-255)内的字节值

      3.读一个下次就自动到下一个,如果碰到-1说明没有值了.

       

    • int read(byte[] b) :
      int len = read(arr);如果文件上有数据返回的就是读到有效的字节个数,如果文件上没有数据返回的就是-1

     

    • int available():(慎用)

      1.返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。

      2.这个方法可以在读写操作前先得知数据流里有多少个字节可以读取,需要注意的是,如果这个方法用在从本地文件读取数据时,一般不会遇到问题。

      3这是因为网络通讯往往是间断性的,一串字节往往分几批进行发送。如果是用于网络操作,会出现问题

      4.如果到达输入流末尾,则返回 0。

     


     

    拷贝文件

    • 逐个字节拷贝
     1 FileInputStream fis = new FileInputStream("致青春.mp3");       //创建输入流对象,关联致青春.mp3
     2 FileOutputStream fos = new FileOutputStream("copy.mp3");    //创建输出流对象,关联copy.mp3
     3 
     4 int b;
     5 while((b = fis.read()) != -1) {                             //将每次读到的赋值给b
     6     fos.write(b);                                           //将b中的字节写出去
     7 }
     8 
     9 fis.close();                                                //关流,释放资源
    10 fos.close();  
    • 自定义数组拷贝
     1 FileInputStream fis = new FileInputStream("致青春.mp3");       //创建输入流对象,关联致青春.mp3
     2 FileOutputStream fos = new FileOutputStream("copy.mp3");    //创建输出流对象,关联copy.mp3
     3 byte[] arr = new byte[1024 * 8];                            //自定义数组
     4 int len;
     5 while((len = fis.read(arr)) != -1) {                            //将数据读到字节数组中
     6     fos.write(arr, 0, len);                                 //从字节数组中将数据写到文件上
     7     //fos.write(arr);
     8 }
     9 
    10 fis.close();                                                //关流,释放资源
    11 fos.close();
    12 
    13 int len = read(arr);如果文件上有数据返回的就是读到有效的字节个数,如果文件上没有数据返回的就是-1
    • 定义一个大数组拷贝,数组和文件的字节个数一样大
    1 //fis.available();一次获取读的文件的大小
    2 FileInputStream fis = new FileInputStream("致青春.mp3");
    3 FileOutputStream fos = new FileOutputStream("copy.mp3");
    4 byte[] arr = new byte[fis.available()];                     //虽然可以拷贝,但是在开发时不建议,有可能会导致内存溢出
    5 fis.read(arr);
    6 fos.write(arr);
    7 fis.close();
    • 带缓冲区的拷贝
     1 FileInputStream fis = new FileInputStream("致青春.mp3");       //创建输入流对象,关联致青春.mp3
     2 BufferedInputStream bis = new BufferedInputStream(fis);     //对fis进行包装,内置一个8192大小的字节数组      
     3 FileOutputStream fos = new FileOutputStream("copy.mp3");    //创建输出流对象,关联copy.mp3
     4 BufferedOutputStream bos = new BufferedOutputStream(fos);   //对fos进行包装,内置一个8192大小的字节数组
     5 
     6 int b;
     7 while((b = bis.read()) != -1) {                             //read一次会先将文件上的数据读到缓冲区中,再从缓冲区一个一个的赋值给b
     8     bos.write(b);                                           //write一次,是将b中的字节数据写到缓冲区,缓冲区写满再一次写到文件上
     9 }
    10 
    11 bis.close();                                                //只需要关掉包装后的即可
    12 bos.close();
  • 相关阅读:
    函数对象与闭包
    20.03.19作业
    关键字参数,名称空间和作用域
    作业03.18
    函数第二天
    20.03.17作业
    文件
    20.01.16作业
    前端基础
    前端知识(二)
  • 原文地址:https://www.cnblogs.com/zchok/p/11715148.html
Copyright © 2020-2023  润新知