day32_学习总结
IO流
文件的传输,输入与输出
按流的方向可以分为:输入流和输出流
按流的类型可以分为:字节流和字符流
字符流主要用于文本文件,可以通过记事本直接打开的文件
字节流
OutputStream—字节输出流(抽象类)
使用需要通过其子类创建流对象
FileOutputStream—文件字节输出流:将内容输出到文本文件中
构造方法:
FileOutputStream(File file)//通过指定的文件向其写入数据
FileOutputStream(String name)//通过指定文件的文件名称向其写入数据
方法:
void close()//关闭自己输出流并释放系统资源
void write(int b)//将指定的字节写入文件
void write(byte[] bytes)//将指定的字节输出组写入文件
void write(byte[] bytes,int offset,int len)//将指定的字节数组的一部分写入文件中,offset表示数组初始位置,len表示写入的数组长度
BufferedOutputStream----字节缓冲输出流(高效的字节输出流)
构造方法:
BufferedOutputStream(OutputStream out)//通过字节输出流对象创建高效的字节输出流,
方法:
void close()//关闭自己输出流并释放系统资源
void write(int b)//将指定的字节写入文件
void write(byte[] bytes)//将指定的字节输出组写入文件
void write(byte[] bytes,int offset,int len)//将指定的字节数组的一部分写入文件中,offset表示数组初始位置,len表示写入的数组长度
InputStream—字节输入流(抽象类)
使用时需要通过其子类创建流对象
FileInputStream—文件字节输入流:将文本文件中的内容读取出来
构造方法:
FileInputStream(File file)//通过指定的文件读取数据
FileInputStream(String name)//通过指定文件的文件名称读取数据
方法:
void close()//关闭字节输入流并释放系统资源
void int read()//从指定的文件中读取一个字节
void int read(byte[] bytes)//从指定的文件中读取一个字节数组
void int read(byte[] bytes,int offset,int len)//从指定的文件中读取一个字节数组的一部分,offset表示数组初始位置,len表示写入的数组长度
注意:在read方法中,如果读取数据已到文件末尾,再读取时会返回-1,表示文件已经读取完毕
BufferedInputStream—字节缓冲输入流对象(高效的字节输入流)
构造方法:
BufferedInputStream(InputStream in)//通过字节输入流创建高效的字节输入流,传递的InputStream对象,可以通过其子类实现
方法:
void close()//关闭字节输入流并释放系统资源
void int read()//从指定的文件中读取一个字节
void int read(byte[] bytes)//从指定的文件中读取一个字节数组
void int read(byte[] bytes,int offset,int len)//从指定的文件中读取一个字节数组的一部分,offset表示数组初始位置,len表示写入的数组长度
注意:在read方法中,如果读取数据已到文件末尾,再读取时会返回-1,表示文件已经读取完毕
练习:
通过普通字节输入输出流和字节缓冲输入输出流来复制文件,比较运行的速度
比较可以表明通过字节缓冲输入输出流,并且通过一次读取一个数组的方法来实现,运行速度最快
public class IOStream {
public static void main(String[] args) throws IOException {
Long start = System.currentTimeMillis() ;
copyMp4_4("E://JAVA2011//day31//day_2021_2_25//avi//01_晨写.mp4","copy.mp4");
Long end = System.currentTimeMillis() ;
System.out.println(end-start);
}
//高效字节输入流,一次数以一个字节数组//218
public static void copyMp4_4(String s,String s1) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(s)) ;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(s1)) ;
byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = bis.read(bytes)) != -1){
bos.write(bytes, 0, len);
}
bos.close();
bis.close();
}
//高效字节输入流,一次数以一个字节//1941
public static void copyMp4_3(String s,String s1) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(s)) ;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(s1)) ;
int dy = 0 ;
while((dy=bis.read())!= -1){
bos.write(dy);
}
bos.close();
bis.close();
}
//字节输入流,一次输入一个字节数组//459
public static void copyMp4_2(String s,String s1) throws IOException {
FileInputStream fis = new FileInputStream(s) ;
FileOutputStream fos = new FileOutputStream(s1) ;
byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = fis.read(bytes)) != -1){
fos.write(bytes, 0, len);
}
fos.close();
fis.close();
}
//字节输入流,一次输入一个字节//184518
public static void copyMp4(String s,String s1) throws IOException {
FileInputStream fis = new FileInputStream(s) ;
FileOutputStream fos = new FileOutputStream(s1) ;
int dy = 0 ;
while((dy=fis.read())!= -1){
fos.write(dy);
}
fos.close();
fis.close();
}
}
字符流
Writer—字符输出流(抽象类)
OutputStreamWriter—字符流通向字节流的桥梁–编码
构造方法:
OutputStreamWriter(OutputStream out)//通过字节输出流对象创建默认的字符编码的字符输出流
OutputStreamWriter(OutputStream out,String charsetName)//通过字节输出流对象创建指定的字符编码的字符输出流
方法:
void close()//关闭流,关闭前需要刷新
void flush()//刷新流
void write(int c)//写入单个字符
void write(String str ,int offset ,int len)//写入字符串的一部分
void write(char[] chs , int offset ,int len)//写入字符数组的一部分
FileWriter—写入字符的便捷类
继承自OutputStreamWriter
通过这个便捷类无需创建字节输出流对象
构造方法:
FileWriter(File file)//通过指定的文件来创建对象
FileWriter(String fileName)//通过指定文件的文件名创建对象
方法:
继承父类中OutputStreamWriter的方法
Reader—字符输入流(抽象类)
InputStreamReader—字节流通向字符流的桥梁–解码
构造方法:
InputStreamReader(InputStream in)//通过默认编码读取字符
InputStreamWriter(InputStream in,String charsetName)//通过指定编码读取字符
方法:
void close()//关闭流
int read()//读取单个字符
int read(char[] chs ,int offset ,int len)//读取字符串数组的一部分
FileReader—字符输入流的便捷类
无需通过InputStream来创建对象
构造方法:
FileReader(File file)//通过指定的文件来创建对象,读取数据
Filereader(String fileName)//通过指定文件的文件名创建对象,读取数据
方法:
继承父类中InputStreamWriter的方法