Java I/O缓冲流

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

缓冲流概述

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

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

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

BufferedOutputStream

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

BufferedOutputStream类示例

package com.javaguides.javaio.fileoperations.examples;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class BufferedOutputStreamExample {
 public static void main(String[] args) {
  File file = new File("C:/Project_Work/workspace/java-io-guide/sample.txt");
  String content = "This is the text content";

  try (OutputStream out = new FileOutputStream(file);
    BufferedOutputStream bout = new BufferedOutputStream(out);) {

   // if file doesn't exists, then create it
   if (!file.exists()) {
    file.createNewFile();
   }
   // get the content in bytes
   bout.write(content.getBytes());
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

BufferedInputStream

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

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

BufferedInputStream示例

package com.javaguides.javaio.fileoperations.examples;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamExample {
 public static void main(String[] args) {
  try( FileInputStream fin=new FileInputStream("D:\\testout.txt");    
       BufferedInputStream bin=new BufferedInputStream(fin); ){
   int i;    
      while((i=bin.read())!=-1){    
       System.out.print((char)i);    
      }    
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

BufferedWriter

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

BufferedWriter类示例

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

package com.javaguides.javaio.fileoperations.examples;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterExample {
 public static void main(String[] args) {
  try (FileWriter writer = new FileWriter("D:\\sample.txt");
   BufferedWriter buffer = new BufferedWriter(writer);) {
   buffer.write("Welcome to JavaGuides.");
   System.out.println("Success");
  } catch (IOException e) {
   e.printStackTrace();
  }

 }
}

BufferedReader

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

BufferedReader类示例

package com.javaguides.javaio.fileoperations.examples;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {
 public static void main(String[] args) {
  try (FileReader fr = new FileReader("C:/Project_Work/sample.txt"); 
    BufferedReader br = new BufferedReader(fr);) {
   int i;
   while ((i = br.read()) != -1) {
    System.out.print((char) i);
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

相关文章