我们常用IO流来处理设备间的数据传输,流按照操作的数据分为字符流和字节流。
目录
一、字节与字符
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();
}
}
}