Java IO流之字符缓冲流实例详解
字符流:
1、加入字符缓存流,增强读取功能(readLine)
2、更高效的读取数据
BufferedReader
从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
FileReader:内部使用InputStreamReader,解码过程,byte->char,默认缓存大小为8k
BufferReader:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高
/字符输入缓冲流
private static void charReader() {
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Reader reader = new FileReader(file);
//为字符流提供缓冲,已达到高效读取的目的
BufferedReader bufr = new BufferedReader(reader);
char[] chars = new char[1024];
int len = -1;
while((len = bufr.read(chars)) != -1) {
System.out.println(new String(chars,0,len));
}
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
FileWriter:内部使用InputStreamWriter,解码过程,byte->char,默认缓存大小为8k
BufferWriter:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高
//字符输出缓存流
private static void charWriter() {
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Writer writer = new FileWriter(file,true);//追加
//为字符流提供缓冲,已达到高效读取的目的
BufferedWriter bufr = new BufferedWriter(writer);
bufr.write("这里是字符缓冲流\r\n");
bufr.flush();
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
总结:
package com.lemon;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
/**
* 缓存的目的:
* 解决在写入文件操作时,频繁的操作文件所带来的性能降低问题
* BufferedOutputStream内部默认的缓存大小是8kb,每次写入时存储到缓存中的byte数组中,当数组存满时,会把数组中的数据写入文件
* 并且缓存下标归零
*
* 字符流:
* 1、加入字符缓存流,增强读取功能(readLine)
* 2、更高效的读取数据
* FileReader:内部使用InputStreamReader,解码过程,byte->char,默认缓存大小为8k
* BufferReader:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高
* BufferedWriter:同上
* @author lemonSun
*
* 2019年5月4日下午8:12:53
*/
public class BufferStreamDemo {
public static void main(String[] args) {
// byteWriter();
// byteReader();
// byteReader1();
// charReader();
charWriter();
}
//字符输出缓存流
private static void charWriter() {
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Writer writer = new FileWriter(file,true);//追加
//为字符流提供缓冲,已达到高效读取的目的
BufferedWriter bufr = new BufferedWriter(writer);
bufr.write("这里是字符缓冲流\r\n");
bufr.flush();
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//字符输入缓存流
private static void charReader() {
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字符流
Reader reader = new FileReader(file);
//为字符流提供缓冲,已达到高效读取的目的
BufferedReader bufr = new BufferedReader(reader);
char[] chars = new char[1024];
int len = -1;
while((len = bufr.read(chars)) != -1) {
System.out.println(new String(chars,0,len));
}
bufr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//缓存流输入 不用关闭 try自动关闭 必须实现Closeable接口
private static void byteReader1(){
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
//buf作用域在try大括号里面多条语句try(;),;隔开
try(BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file))) {
byte[] bytes = new byte[1024];
int len = -1;
while((len = buf.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//缓存流输入
private static void byteReader(){
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字节输出流
InputStream in = new FileInputStream(file);
//字节缓冲流
BufferedInputStream buf = new BufferedInputStream(in);
byte[] bytes = new byte[1024];
int len = -1;
while((len = buf.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
buf.close();//自动关闭 in.close
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//缓存流输出
private static void byteWriter(){
//目标文件
File file = new File("F:\\javatest\\lemon1.txt");
try {
//字节输出流
OutputStream out = new FileOutputStream(file,true);
//缓冲流
BufferedOutputStream buf = new BufferedOutputStream(out);
//内容
String info = "这里是缓冲流\r\n";
//写入
buf.write(info.getBytes());
buf.close(); //jdk1.7以后自动关闭 out
// out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上所述是小编给大家介绍的Java IO流之字符缓冲流详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
以上是 Java IO流之字符缓冲流实例详解 的全部内容, 来源链接: utcz.com/z/332758.html