在unbuffered I/O
中,每个读或写请求都由底层操作系统直接处理。这会降低程序的效率,因为每个这样的请求通常会触发disk access, network activity
或其他一些相对昂贵的操作。
为了减少这种开销,Java平台实现了缓冲I/O流。缓冲输入流从称为buffer
的内存区域读取数据;只有当缓冲区为空时,才会调用本机输入API
。类似地,缓冲输出流将数据写入缓冲区,并且仅当缓冲区已满时才调用本机输出API。
有四个缓冲流类用于包装未缓冲的流:
让我们用示例演示缓冲流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
类。
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();
}
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/07/java-io-buffered-streams.html
内容来源于网络,如有侵权,请联系作者删除!