缓冲流
缓冲流是为了读取和写入的速度,提高效率主要包括:字节缓冲流和字符缓冲流
字节缓冲流:
根据流的方向,共有2个:字节缓冲输出流BufferedOutputStream和字节缓冲输入流BufferedInputStream,它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度
构造方法:public BufferedOutputStream(OutputStream out);
//创建基本的字节输出流
FileOutputStream fileOut=newFileOutputStream("abc.txt");
//使用高效的流,把基本的流进行封装,实现速度的提升
BufferedOutputStream out=newBufferedOutputStream(fileOut);
//2,写数据
out.write("hello".getBytes());
//3,关闭流
out.close();
}
构造方法:public BufferedInputStream(InputStream in);
FileInputStream fileIn =newFileInputStream("abc.txt");
//把基本的流包装成高效的流
BufferedInputStream in =newBufferedInputStream(fileIn);
//2,读数据
int ch = -1;
while( (ch = in.read()) != -1 ) {
//打印
System.out.print((char)ch);
}
//3,关闭
in.close();
高效的实现复制文件;
BufferedInputStream in =newBufferedInputStream(newFileInputStream("c:\\a.txt"));
//2,指定目的地
BufferedOutputStream out=newBufferedOutputStream(newFileOutputStream("c:\\b.txt"));
//3,读数据
byte[] buffer =newbyte[1024];
intlen = -1;
while( (len = in.read(buffer)) != -1) {
//4,写数据
out.write(buffer, 0, len);
}
//5,关闭流
in.close();
out.close();
字符缓冲流:
字符缓冲输入流BufferedReader。字符缓冲输出流BufferedWriter
BufferedWriter
//创建流
//基本字符输出流
FileWriter fileOut =newFileWriter("file.txt");
//把基本的流进行包装
BufferedWriter out =newBufferedWriter(fileOut);
//2,写数据
for(inti=0; i<5; i++) {
out.write("hello");
out.newLine();//写入换行
}
//3,关闭流
out.close();
}
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
publicStringreadLine()读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null
//1,创建流
BufferedReader in =newBufferedReader(newFileReader("file.txt"));
//2,读数据
//一次读取文本中一行的字符串内容
String line =null;
while( (line = in.readLine()) !=null){
System.out.println(line);
}
//3,关闭流
in.close();
使用缓冲流高效的完成文件的复制
//1,指定数据源,是数据源中读数据,采用输入流
BufferedReader in =newBufferedReader(newFileReader("file.txt"));
//2,指定目的地,是把数据写入目的地,采用输出流
BufferedWriter out =newBufferedWriter(newFileWriter("copyFile.txt"));
//3,读数据
String line =null;
while( (line = in.readLine()) !=null) {
//4,写数据
out.write(line);
//写入换行符号
out.newLine();}
//5,关闭流
out.close(); in.close();
}
这么多流该如何选择:
目的设备:
硬盘:文件File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
完全可以明确具体要使用哪个流对象。
知识点总结
字节流
字节输入流InputStream
FileInputStream操作文件的字节输入流
BufferedInputStream高效的字节输入流
字节输出流OutputStream
FileOutputStream操作文件的字节输出流
BufferedOutputStream高效的字节输出流
字符流
字符输入流Reader
FileReader操作文件的字符输入流
BufferedReader高效的字符输入流
InputStreamReader输入操作的转换流(把字节流封装成字符流)
字符输出流Writer
FileWriter操作文件的字符输出流
BufferedWriter高效的字符输出流
OutputStreamWriter输出操作的转换流(把字节流封装成字符流)
方法:
读数据方法:
read()一次读一个字节或字符的方法
read(byte[]char[])一次读一个数组数据的方法
readLine()一次读一行字符串的方法(BufferedReader类特有方法)
readObject()从流中读取对象(ObjectInputStream特有方法)
写数据方法:
write(int)一次写一个字节或字符到文件中
write(byte[] char[])一次写一个数组数据到文件中
write(String)一次写一个字符串内容到文件中
uwriteObject(Object )写对象到流中(ObjectOutputStream类特有方法)
unewLine()写一个换行符号(BufferedWriter类特有方法)
向文件中写入数据的过程
1,创建输出流对象
2,写数据到文件
3,关闭输出流
从文件中读数据的过程
1,创建输入流对象
2,从文件中读数据
3,关闭输入流
l文件复制的过程
1,创建输入流(数据源)
2,创建输出流(目的地)
3,从输入流中读数据
4,通过输出流,把数据写入目的地
5,关闭流
�