Java IO 缓冲流的读入和写出

Java IO 缓冲流的读入和写出

    缓冲流也成为处理流,目的是提高程序读取和写出的性能。缓冲流也分为字节缓冲流和字符缓冲流。

1 字符缓冲流,类包含BufferedInputStream 和 BufferedOutputStream

1.1 BufferedInputStream 源码

查看源码,BufferedInputStream相对于InputStream没有新增方法,所以在使用时可以使用多态。

  • BufferedInputStream的demo如下,与InputStream的demo对比
/**
 - 缓冲流读取文件 jdk 7 新特性
 - 
 - @param file
 -            文件对象
 */
public static void readFileWithJdk7(File file) {
    // java 7 新特性 try-with-resource
    // 不用手动释放资源,程序自动释放,因为InputStream实现了AutoCloseable接口
    try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
        byte[] buffer = new byte[1024];
        int len = 0;
        while (-1 != (len = is.read(buffer))) {
            System.out.println(new String(buffer, 0, len));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
/**
 - 缓冲流读取文件
 - 
 - @param file
 -            文件对象
 */
public static void readFile(File file) {
    InputStream is = null;
    try {
        is = new BufferedInputStream(new FileInputStream(file));
        byte[] buffer = new byte[1024];
        int len = 0;
        while (-1 != (len = is.read(buffer))) {
            System.out.println(new String(buffer, 0, len));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != is) {
                is.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/**
 - 
 - @param filePath
 -            文件路径
 */
public static void readFile(String filePath) {
    readFile(new File(filePath));
}

1.2 BufferedOutputStream 源码

查看源码,BufferedOutputStream向比较与OutputStream没有增加新方法,故可以使用多态。

  • BufferedOutputStream的demo如下,与OutputStream的demo对比
/**
 * 缓冲流写出文件 jdk 7 新特性
 * 
 * @param file
 *            指定输出文件
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFileJdk7(File file, String msg, boolean append) {
    // java 7 新特性 try-with-resource
    // 不用手动释放资源,程序自动释放,因为OutputStream实现了AutoCloseable接口
    try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
        os.write(msg.getBytes(), 0, msg.getBytes().length);
        os.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
/**
 * 缓冲流写出文件
 * 
 * @param file
 *            指定输出文件
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFile(File file, String msg, boolean append) {
    OutputStream os = null;
    try {
        os = new BufferedOutputStream(new FileOutputStream(file));
        os.write(msg.getBytes(), 0, msg.getBytes().length);
        os.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != os) {
                os.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 
 * @param filePath
 *            指定输出文件路径
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFile(String filePath, String msg, boolean append) {
    writeToFile(new File(filePath), msg, append);
}

2 字符缓冲流,类包含BufferedReader 和 BufferedWriter

2.1 BufferedReader源码

相对于Reader类,BufferedReader新增了以下方法,所以不能使用多态。

/**
 * 读取一行字符串
 */
public String readLine() throws IOException {
    return readLine(false);
}
  • BufferedReader的demo如下,与Reader的demo对比
/**
 * 
 * 使用BufferedReader字符缓冲流读取文件
 * 
 * 使用BufferedReader新增方法readLine(),所以不能使用多态
 * 
 * @param file
 *            文件对象
 */
public static void readFile(File file) {
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(file));
        String line = null;
        while (null != (line = br.readLine())) {
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != br) {
                br.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 
 * 使用BufferedReader字符缓冲流读取文件
 * 
 * 使用BufferedReader新增方法readLine(),所以不能使用多态
 * 
 * @param file
 *            文件对象
 */
public static void readFileWithJdk7(File file) {
    // java 7 新特性 try-with-resource
    // 不用手动释放资源,程序自动释放,因为Reader实现了AutoCloseable接口
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        String line = null;
        while (null != (line = reader.readLine())) {
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
/**
 * 
 * @param filePath
 *            文件路径
 */
public static void readFile(String filePath) {
    readFile(new File(filePath));
}

2.2 BufferedWriter源码

相对于Writer类,新增以下方法,所以使用新增方法不能使用多态。

/**
 * 输出一个换行符 '\n'
 */
public void newLine() throws IOException {
    write(lineSeparator);
}
  • BufferedWriter的demo如下,与Writer的demo对比
/**
 * jdk 7 新特性
 * 
 * 使用BufferedWriter字符缓冲流写出文件
 * 
 * BufferedWriter 新增方法newLine(),所以不能使用多态
 * 
 * @param file
 *            指定输出文件
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFileWithJdk7(File file, String msg, boolean append) {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
        writer.write(msg);
        writer.newLine();
        writer.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
/**
 * 
 * 使用BufferedWriter字符缓冲流写出文件
 * 
 * BufferedWriter 新增方法newLine(),所以不能使用多态
 * 
 * @param file
 *            指定输出文件
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFile(File file, String msg, boolean append) {
    BufferedWriter writer = null;
    try {
        writer = new BufferedWriter(new FileWriter(file));
        writer.write(msg);
        writer.newLine();
        writer.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != writer) {
                writer.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 
 * @param filePath
 *            指定输出文件路径
 * @param msg
 *            输出内容
 * @param append
 *            是否追加,true 追加 false 不追加
 */
public static void writeToFile(String filePath, String msg, boolean append) {
    writeToFile(new File(filePath), msg, append);
}

你可能感兴趣的:(Java,IO流)