IO-字符流、字节流

本文介绍了Java中的IO流,重点讨论了字节流和字符流的区别与应用场景。字节流主要操作字节数据,适用于任何类型的文件传输;字符流则处理字符数据,尤其适合处理文本数据,避免乱码问题。文章详细讲解了如何使用字节流进行文件拷贝,并探讨了文件格式、编码不一致的情况。同时,提到了字符流的缓冲区机制和关闭流的优化方式。最后,阐述了字节流与字符流之间的转换,如OutputStreamWriter和InputStreamReader的使用。
摘要由CSDN通过智能技术生成

        我们常用IO流来处理设备间的数据传输,流按照操作的数据分为字符流和字节流。

目录

一、字节与字符

二、字节流

1、使用字节流实现文件拷贝

(1)前后文件格式一致、编码一致

(2)前后文件格式不一致

(3)若文件2不为空

 2、使用 try-catch-finally 优化资源释放

三、字符流

 1、字符流

 2、写字符

 四、字节流字符流相互转换

 1、文件字节输入流转为读流

2、文件字节输出流转为写流


一、字节与字符

        Bit最小的二进制单位 ,是计算机的操作部分。取值0或者1

        Byte(字节)是计算机操作数据的最小单位由8位bit组成 取值(-128-127)

        Char(字符)是用户的可读写的最小单位,在Java里面由16位bit组成 取值(0-65535)

二、字节流

        字节流操作byte类型数据,主要操作类是OutputStream、InputStream的子类;不用缓冲区,直接对文件本身操作。

        由于文件在进行存储和传输的时候,都是以二进制数字的方式进行的,因此,字节流可以传输任意文件的数据。(数据传输的底层都是二进制)

1、使用字节流实现文件拷贝

        无论是音视频文件还是文本文件底层都是字节组成,因此可以使用字节输入流和字节输出流完成文件拷贝(只要保证前后文件格式、编码一致)。

(1)前后文件格式一致、编码一致

        此时文件可以拷贝成功

package com.basic.demo.controller;

import com.basic.common.core.rest.Rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * io文件模块
 *
 * @date 10:06 2022/8/24
 */
@RestController
@RequestMapping("/io")
@Api(tags = "io文件模块")
public class IoController {

    @PostMapping(value = "/ioFile")
    @ApiOperation(value = "字节流文件拷贝")
    public void ioFile() {
        try {
            //创建字节输入流管道
            InputStream is = new FileInputStream("C:\\Users\\Desktop\\1.txt");
            //InputStream is = Files.newInputStream(Paths.get("C:\\Users\\Desktop\\1.txt"));
            //创建字节输出流管道
            OutputStream os = new FileOutputStream("C:\\Users\\Desktop\\2.txt");
            //OutputStream os = Files.newOutputStream(Paths.get("C:\\Users\\Desktop\\2.txt"));

            //定义一个1024大小字节数组,用来转移数据
            byte[] buffer = new byte[1024];
            int len;
            while((len = is.read(buffer)) != -1){
                os.write(buffer,0,len);
            }
            System.out.println("复制完成!");
            //关闭流
            os.close();
            is.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值