IO流——字节流

IO流的分类

按照流的方向分:①输入流 ②输出流
按照流中最小单位分:字节流    字符流

一、字节输入流:InputStream

概念:以内存为基准 来自磁盘文件/网络中的数据以字节的形式读取到内存中去的流称为字节输入流

常见API 的使用:

1.每次读取一个字节
   public static void main(String[] args) throws Exception {
        //创建一个文件字节输入流管道与源文件接通
        InputStream is = new FileInputStream("File-IO-app\\src\\word.txt");//源文件的位置
//        //读取一个字节返回
        int b1 = is.read();
        System.out.println((char) b1);
           //使用循环读取
        int b;
        while ((b = is.read() )!= -1){
            System.out.print((char) b);
        }
    }
2.一次读取字节数组的长度
 public static void main(String[] args) throws Exception {
        //创建一个文件字节输入流管道与源文件接通
        InputStream is = new FileInputStream("File-IO-app\\src\\word01.txt");//源文件的位置
        //定义一个字节数组 用于读取字节数组
        byte[] buffer = new byte[3]; //一次读取3个字节
        int len1 = is.read(buffer); //记录读取的长度
        System.out.println("读取了" + len1 + "个字节");
        String str1 = new String(buffer,0,len);//从0位置开始读取,读取的长度为len
        System.out.println(str1);
        
//        使用循环进行读取,每次读取一个字节数组
        byte[] buffer = new byte[3]; //每次读取3个字节
        int len;//记录每次读取的字节数
        while ((len= is.read(buffer)) != -1){
            System.out.print(new String(buffer,0,len));
        }
	}
3.读取全部数组     可以避免读取中文内容乱码问题 一次读完
   public static void main(String[] args) throws Exception {
        //创建一个文件字节输入流管道与源文件接通
        File f = new File("File-IO-app\\src\\word01.txt");
        InputStream is = new FileInputStream(f);

        //读取全部字节数组
        byte[] buffer = is.readAllBytes();
        System.out.println(new String(buffer));

    }
二、字节输出流:OutputStream

概念:以内存为基准 来自磁盘文件/网络中的数据以字节的形式写入到内存中去的流称为字节输出流

常见API 的使用:

 public static void main(String[] args) throws Exception{
        //1.创建一个文件字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("File-IO-app\\src\\out.txt");//目标文件位置
        //2.写数据出去
        // public void write(int a) 写一个字节出去
//        os.write('a');
//        os.write(97);
//        os.write(97);
//        os.write('刘'); 中文会出现乱码 中文占3个字节 默认每次读取两个字节

//        //public void write(byte[] buffer)  写一个字节数组出去
        byte[] buffer = {'a', 97, '2', 97, 98};
        os.write(buffer);
        os.flush();//刷新数据生效
//        os.close();//关闭输出流管道,减少内存占用

        //写中文的数组进去
        byte[] buffer2 = "今天天气不错".getBytes();
        os.write(buffer2);

        //写数组的一部分数据进去
        byte[] buffer3 = {'a', 95, 95, 97, 98};
        os.write(buffer3,0,3);//从位置0开始写入,长度是3个字节

		//	1.字节输出流实现写出去的数据换行
		//	**os.write("\r\n".getBytes())**
		//	2.写出去的数据刷新出来
		//	**os.flush()**
		//	3.关闭输出流通道
		//	**os.close**

    }
三、数据拷贝:
public static void main(String[] args) {
        //1.创建一个字节输入流管道与源文件接通
        try {
            InputStream in = new FileInputStream("E:\\视频\\lv_0_20210607170153.mp4");//源视频路径

            //2.创建一个字节输出流管道与目标文件接通
            OutputStream out = new FileOutputStream("E:\\日落.mp4");//目标文件路径 可以没有文件名 会自动创建

            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024];//一次传输1024字节
            int len; //记录每次读取的字节数
            while ((len = in.read(buffer)) != -1){
                out.write(buffer,0,len);
            }
            System.out.println("复制完成!");

            //4.用完关闭通道
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
四、资源释放:

将创建的的InputStream 和 OutputStream 放在try( )里面

    //这里只能放置资源对象 用完会自动关闭 自动调取资源对象的close方法关闭资源 遇到异常也会关闭
        try (
                //1.创建一个字节输入流管道与源文件接通
                InputStream in = new FileInputStream("E:\\视频\\lv_0_20210607170153.mp4");

                //2.创建一个字节输出流管道与目标文件接通
                OutputStream out = new FileOutputStream("E:\\日落.mp4");
        )  } catch (Exception e) {
            e.printStackTrace();
        }
五、字节缓冲输入流
//2.创建一个字节输入流管道与源文件接通
 InputStream is = new FileInputStream("File-IO-app\\src\\word.txt")
 //InputStream bin = new BufferedInputStream(InputStream in);
 //a.把原始的字节输出流包装成高级的缓冲字节输入流
 InputStream bin = new BufferedInputStream(is);

六、字节缓冲输出流
  //2.创建一个字节输出流管道与目标文件接通
  OutputStream out = new FileOutputStream("E:\\日落.mp4");//目标文件路径
  //a.把原始的字节输出流包装成高级的缓冲字节输出流
  OutputStream bout = new BufferedOutputStream(out);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值