Java I/O缓冲流

x33g5p2x  于2022-10-15 转载在 Java  
字(2.9k)|赞(0)|评价(0)|浏览(823)

缓冲流概述

unbuffered I/O中,每个读或写请求都由底层操作系统直接处理。这会降低程序的效率,因为每个这样的请求通常会触发disk access, network activity或其他一些相对昂贵的操作。
为了减少这种开销,Java平台实现了缓冲I/O流。缓冲输入流从称为buffer的内存区域读取数据;只有当缓冲区为空时,才会调用本机输入API。类似地,缓冲输出流将数据写入缓冲区,并且仅当缓冲区已满时才调用本机输出API。
有四个缓冲流类用于包装未缓冲的流:

  • BufferedInputStream和BufferedOutputStream-创建缓冲字节流
  • BufferedReader和BufferedWriter-创建缓冲字符流

让我们用示例演示缓冲流I/O类。

BufferedOutputStream

Java BufferedOutputStream类用于缓冲输出流。它在内部使用缓冲区存储数据。与直接将数据写入流相比,它提高了效率。因此,它使性能更快。

BufferedOutputStream类示例

  1. package com.javaguides.javaio.fileoperations.examples;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. public class BufferedOutputStreamExample {
  8. public static void main(String[] args) {
  9. File file = new File("C:/Project_Work/workspace/java-io-guide/sample.txt");
  10. String content = "This is the text content";
  11. try (OutputStream out = new FileOutputStream(file);
  12. BufferedOutputStream bout = new BufferedOutputStream(out);) {
  13. // if file doesn't exists, then create it
  14. if (!file.exists()) {
  15. file.createNewFile();
  16. }
  17. // get the content in bytes
  18. bout.write(content.getBytes());
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

BufferedInputStream

Java BufferedInputStream类用于从流中读取信息。它在内部使用缓冲机制来提高性能。
关于BufferedInputStream的要点是:

  • 当跳过或读取流中的字节时,内部缓冲区会自动从包含的输入流中重新填充,一次填充许多字节。
  • 创建BufferedInputStream时,会创建一个内部缓冲区数组。

BufferedInputStream示例

  1. package com.javaguides.javaio.fileoperations.examples;
  2. import java.io.BufferedInputStream;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. public class BufferedInputStreamExample {
  6. public static void main(String[] args) {
  7. try( FileInputStream fin=new FileInputStream("D:\\testout.txt");
  8. BufferedInputStream bin=new BufferedInputStream(fin); ){
  9. int i;
  10. while((i=bin.read())!=-1){
  11. System.out.print((char)i);
  12. }
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. }

BufferedWriter

Java BufferedWriter类用于为Writer示例提供缓冲。它使性能更快。它继承了Writer类。缓冲字符用于提供单个数组、字符和字符串的高效写入。

BufferedWriter类示例

让我们看看使用Java BufferedWriter将数据写入文本文件sample.txt的简单示例。

  1. package com.javaguides.javaio.fileoperations.examples;
  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. public class BufferedWriterExample {
  6. public static void main(String[] args) {
  7. try (FileWriter writer = new FileWriter("D:\\sample.txt");
  8. BufferedWriter buffer = new BufferedWriter(writer);) {
  9. buffer.write("Welcome to JavaGuides.");
  10. System.out.println("Success");
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }

BufferedReader

Java BufferedReader类用于从基于字符的输入流中读取文本。它可用于通过readLine()方法逐行读取数据。它使性能更快。它继承Reader类。

BufferedReader类示例

  1. package com.javaguides.javaio.fileoperations.examples;
  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. public class BufferedReaderExample {
  6. public static void main(String[] args) {
  7. try (FileReader fr = new FileReader("C:/Project_Work/sample.txt");
  8. BufferedReader br = new BufferedReader(fr);) {
  9. int i;
  10. while ((i = br.read()) != -1) {
  11. System.out.print((char) i);
  12. }
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. }

相关文章

最新文章

更多