字节输入流InputStream

07字节输入流InputStream

* A: 字节输入流InputStream
    * a: 方法介绍
        * abstract  int read() :
            * 从输入流中读取数据的下一个字节。
        * int read(byte[] b)  
            * 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
        * int read(byte[] b, int off, int len) 
            * 将输入流中最多 len 个数据字节读入 byte 数组。
        * void close() 
            * 关闭此输入流并释放与该流关联的所有系统资源。
            
            
    * b: 案例代码
        /*
         *   字节输入流
         *     java.io.InputStream 所有字节输入流的超类
         *   作用: 读取任意文件,每次只读取1个字节
         *   读取的方法  read
         *     int  read() 读取1个字节
         *     int  read(byte[] b) 读取一定量的字节,存储到数组中
         */
        public class InputStreamDemo {

        }

08字节输入流FileInputStream读取字节

* A: 字节输入流FileInputStream读取字节
    * a: 方法介绍
        * abstract  int read() :
            * 从输入流中读取数据的下一个字节,返回-1表示文件结束
        * int read(byte[] b)  
            * 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
            * 读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
        * int read(byte[] b, int off, int len) 
            * 将输入流中最多 len 个数据字节读入 byte 数组。
        * void close() 
            * 关闭此输入流并释放与该流关联的所有系统资源。
    * b: 案例代码
        /*
         *  FileInputStream读取文件
         *  
         *  构造方法: 为这个流对象绑定数据源
         *  
         *    参数: 
         *      File 类型对象
         *      String 对象
         *   输入流读取文件的步骤
         *     1. 创建字节输入流的子类对象
         *     2. 调用读取方法read读取
         *     3. 关闭资源
         *     
         *     read()方法,
         *       read()执行一次,就会自动读取下一个字节
         *       返回值,返回的是读取到的字节, 读取到结尾返回-1
         */
        public class FileInputStreamDemo {
            public static void main(String[] args) throws IOException{
                FileInputStream fis = new FileInputStream("c:\\a.txt");
                //读取一个字节,调用方法read 返回int
                //使用循环方式,读取文件,  循环结束的条件  read()方法返回-1
                int len = 0;//接受read方法的返回值
            
                while( (len = fis.read()) != -1){
                    System.out.print((char)len);
                }
                //关闭资源
                fis.close();
            }
        }

        /*
         * int i = fis.read();
                System.out.println(i);
                
                i = fis.read();
                System.out.println(i);
                
                i = fis.read();
                System.out.println(i);
                
                i = fis.read();
                System.out.println(i);
         */

09字节输入流FileInputStream读取字节数组

* A: 字节输入流FileInputStream读取字节数组
    * a: 方法介绍
        * int read(byte[] b)  
            * 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
            * 读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
        * int read(byte[] b, int off, int len) 
            * 将输入流中最多 len 个数据字节读入 byte 数组。
    * b: 案例代码
        /*
         *  FileInputStream读取文件
         *   读取方法  int read(byte[] b) 读取字节数组
         *   数组作用: 缓冲的作用, 提高效率
         *   read返回的int,表示什么含义 读取到多少个有效的字节数
         */
        public class FileInputStreamDemo1 {
            public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("c:\\a.txt");
                // 创建字节数组
                byte[] b = new byte[2];

                int len = fis.read(b);
                System.out.println(new String(b));// ab
                System.out.println(len);// 2

                len = fis.read(b);
                System.out.println(new String(b));// cd
                System.out.println(len);// 2

                len = fis.read(b);
                System.out.println(new String(b));// ed
                System.out.println(len);// 1

                len = fis.read(b);
                System.out.println(new String(b));// ed
                System.out.println(len);// -1

                fis.close();
            }
        }

10字节输入流FileInputStream读取字节数组的实现原理

* A:字节输入流FileInputStream读取字节数组的实现原理
    * a: 原理
        * 参见day23_source文件夹中的"读取数组的原理.jpg"
    
                
    * b: 案例代码
    
        public class FileInputStreamDemo1 {
            public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("c:\\a.txt");
                //创建字节数组
                byte[] b = new byte[1024];
                
                int len = 0 ;
                while( (len = fis.read(b)) !=-1){
                    System.out.print(new String(b,0,len));
                }
                fis.close();
            }
        }

11文件复制原理

* A: 文件复制原理
    * a: 见day23_source/文件复制原理.jpg

12字节流复制文件读取单个字节

* A: 字节流复制文件读取单个字节
    * a: 案例代码
        /*
         *  将数据源 c:\\a.txt
         *  复制到 d:\\a.txt  数据目的
         *  字节输入流,绑定数据源
         *  字节输出流,绑定数据目的
         *  
         *  输入,读取1个字节
         *  输出,写1个字节
         */
        public class Copy {
            public static void main(String[] args) {
                //定义两个流的对象变量
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try{
                    //建立两个流的对象,绑定数据源和数据目的
                    fis = new FileInputStream("c:\\t.zip");
                    fos = new FileOutputStream("d:\\t.zip");
                    //字节输入流,读取1个字节,输出流写1个字节
                    int len = 0 ;
                    while((len = fis.read())!=-1){
                        fos.write(len);
                    }
                }catch(IOException ex){
                    System.out.println(ex);
                    throw new RuntimeException("文件复制失败");
                }finally{
                    try{
                        if(fos!=null)
                            fos.close();
                    }catch(IOException ex){
                        throw new RuntimeException("释放资源失败");
                    }finally{
                        try{
                            if(fis!=null)
                                fis.close();
                        }catch(IOException ex){
                            throw new RuntimeException("释放资源失败");
                        }
                    }
                }
            }
        }

13字节流复制文件读取字节数组

* A: 字节流复制文件读取字节数组
    * a: 案例代码
        /*
         *  字节流复制文件
         *   采用数组缓冲提高效率
         *   字节数组
         *   FileInputStream 读取字节数组
         *   FileOutputStream 写字节数组
         */
        public class Copy_1 {
            public static void main(String[] args) {
                long s = System.currentTimeMillis();
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try{
                    fis = new FileInputStream("c:\\t.zip");
                    fos = new FileOutputStream("d:\\t.zip");
                    //定义字节数组,缓冲
                    byte[] bytes = new byte[1024*10];
                    //读取数组,写入数组
                    int len = 0 ; 
                    while((len = fis.read(bytes))!=-1){
                        fos.write(bytes, 0, len);
                    }
                }catch(IOException ex){
                    System.out.println(ex);
                    throw new RuntimeException("文件复制失败");
                }finally{
                    try{
                        if(fos!=null)
                            fos.close();
                    }catch(IOException ex){
                        throw new RuntimeException("释放资源失败");
                    }finally{
                        try{
                            if(fis!=null)
                                fis.close();
                        }catch(IOException ex){
                            throw new RuntimeException("释放资源失败");
                        }
                    }
                }
                long e = System.currentTimeMillis();
                System.out.println(e-s);
            }
        }

你可能感兴趣的:(字节输入流InputStream)