java IO有很多的对象,有时用的时候不知道到底应该用那个,或者说用哪个的效率更高。今天通过学习总结了一下如何选用Java IO流对象的方法
常用的IO流对象
现根据输入输出分个组
常用输入流
FileReader,BufferedReader,FileInputStream,BufferedInputStream,InputStreamReader
常用输出流
FileWriter,BufferedWriter,FileOutputStream,BufferedOutputStream,OutputStreamWriter
可以看到,上面写的输入流和输出流按顺序是一一对应的,现在来分析在操作数据是怎样选择正确的流对象。
- 如果是操作纯文本数据:尽量选择字符流Reader和Writer的子类,不过一般最好用带有缓冲区的BufferedReader和BufferedWriter,当操作的数据已经编程字节流对象时,可以用InputStreamReader和InputStreamWriter两个转换流将字节流转换成字符流,代码示例:
BufferedReader bfr = new BufferedReader(new InputStreamReader(new BufferedInputStream(new File(“文件路径”))));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new File(“文件路径”))));
总结:只要是操作纯文本数据,就尽量将其转换为字符流对象操作,并且尽量使用待缓冲区的字符流对象,这样能保证其操作数据的高效性 如果是操作飞纯文本数据:这时候只能选择字节流,因为字符流操作非纯文本数据会出现乱码等现象。字节流也建议使用带有缓冲区的对象,提高效率
学习的代码
package javaIO;
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.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import org.junit.Test;
public class InputStreamOutputStream {
@Test
public void InputStreamAndOutputStream() throws IOException
{
FileInputStream input = new FileInputStream(new File("G:\\1.txt"));
FileOutputStream output = new FileOutputStream(new File("G:\\4.txt"),true);
// System.out.println(input.available());
byte[] ch = new byte[1024];
int len;
while((len = input.read(ch)) != -1)
{
output.write(ch,0,len);
output.flush();
// System.out.println(new String(ch,0,len));
}
input.close();
output.close();
}
@Test
public void BufferedInputStreamAndBufferedOutputStream() throws IOException
{
BufferedInputStream bfis = new BufferedInputStream(new FileInputStream(new File("G:\\1.txt")));
BufferedOutputStream bfos = new BufferedOutputStream(new FileOutputStream(new File("G:\\5.txt")));
BufferedReader bfr = new BufferedReader(new InputStreamReader(bfis));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(bfos));
// int b;
String line;
while((line = bfr.readLine()) != null)
{
bfw.write(line);
bfw.newLine();
}
// bfis.close();
// bfos.close();
bfr.close();
bfw.close();
}
}