流(字节流)
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作
分类:
1. 按照流向分:(以内存为参照点)
字节流 FileInputStream/FileOutputStream
说明:
1. 字节流可以把内容转为字节形式进行传输,1字节为8bit,实质就是二进制可以传输任何类型的数据,所以字节流可以传输任何文件
2.字节流是8位通用字节流(1字节->8二进制)(字节流可以处理任何类型);字符流是16位的unicode字符流(只用于处理字符,处理文本文件)
使用字节流复制文件:
实现把d盘的in.txt上的内容复制到out.txt
tips:
1. 读取缓冲区buf到文件需要注意 不能一下子全部读完,因为文件万一很大,对内存的负担很大
2. 每次输出的是上一次读取字节的长度(len),因为最后一次读取的不为缓冲区大小,会发生覆盖现象.
import java.io.*;
public class filecopy {
public static void main(String[] args) throws IOException {
InputStream in =null;
OutputStream out=null;
try {
in = new FileInputStream(new File("d:/in.txt"));
out = new FileOutputStream(new File("d:/out.txt"));
//读入到buf缓冲区 然后输出
byte buf[]=new byte[10]; //每次读取10个字节 防止一下子开辟过大内存
int len=-1;
while((len=in.read(buf)) != -1){ //in-->buf
//输出到out
out.write(buf,0,len); //每次out的字节范围是0到上一个输入的文件大小
}
}catch (Exception e) {
e.printStackTrace();
}finally {
out.close();
in.close();
}
}
}