缓冲流:前面的字节流和字符流都没有使用缓冲区,这就意味着,每次的读写操作都要交给操作系统来处理。这样的做法可能会对系统的性能造成很大的影响,因为每次访问操作都可能会引发磁盘硬件的读写或网络的访问,这些磁盘硬件读写或网络访问会占用大量的资源,影响效率。缓冲流是一种装饰器
类,目的是让原字节流,字符流新增缓冲的功能。常使用BufferedInputStream或BufferedOutputStream来进行修饰。
字节流转为字符流:将一个字节流转为一个字符流,通常使用InputStreamReader或OutputStreamWriter进行转换。
数据流:简单来说就是允许字节流直接操作基本数据类型和字符串。常用DataInputStream或DataoutputStream进行转换。
演示
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
public static void main(String[] args) {
// fun1();
// fun2();
// fun3();
}
//演示BufferedReader
public static void fun1(){
BufferedReader br = null;
try {
//BufferedReader的参数类型为Reader类
br = new BufferedReader(new FileReader("F:\\test.txt"));
String str = "";
while((str = br.readLine()) != null){ //BufferedReader常用的方法就是readLine,如果到了文件尾部,返回null。节点流类似的方法返回-1
System.out.println(str);
}
System.out.println("读取完毕!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
if(br != null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//演示InputStreamReader
public static void fun2(){
//system.in为inputStream字节流,将其转为字符流
BufferedReader br = null;
try {
//InputStreamReader的参数是InputStream类型的
br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入:");
String str = br.readLine();
System.out.println("输入的是:"+str);
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
try {
if(br != null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//演示DataOutputStream
public static void fun3(){
DataOutputStream dos = null;
try {
//DataOutputStream的参数为OutputStream类型的,所以创建一个FileOutputStream对象
dos = new DataOutputStream(new FileOutputStream("F:\\test1.txt"));
dos.writeInt(45);
dos.writeByte(0);
dos.writeLong(469553L);
dos.writeUTF("试一下啦");
dos.writeChar('a');
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
if(dos != null){
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}