printwriter和bufferedwriter(PrintWriter和FileWriter这两个类有什么区别)
本文目录
- PrintWriter和FileWriter这两个类有什么区别
- BufferedReader和BufferedWriter的区别 及用法
- PrintWriter和BufferedWriter的区别
- 我用fileWriter和bufferedwriter写入文件,为什么写进去就是乱码呢
- BufferedWriter和FileWriter的区别
PrintWriter和FileWriter这两个类有什么区别
PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。
区别如下:
1、PrintWriter提供println方法可以写不同平台的换行符,而BufferedWriter可以任意设定缓冲大小。
2、OutputStream可以直接传给PrintWriter(BufferedWriter不能接收)。
3、FileReader 和FileWriter都是继承父类的方法。他们本身的类中没有重写父类的任何方法。实际上就是等价于他们的父类outputStreamWriter,inputSteamReader,至于它们存在的意义只是为了方便理解,一看就知道是用来写入字符文件的。
4、FileWriter 很明显是针对文件的封装,PrintWriter 则更普遍一点。
BufferedReader和BufferedWriter的区别 及用法
bufferedreader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取;
bufferedwriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
这个是将字符输入流嵌套在控制台输入流中,用于入去控制台输入的字符。
BufferedReader br=new BufferedReader(new FileReader("test.txt"));
对文件test.txt构造了一个字符输入流,用于将test.txt中的字符读取出来。
BufferedWriter br3=new BufferedWriter (new FileWriter ("test.txt"));
对文件test.txt构造了一个字符输出流,用于将输出流中的数据写入到test.txt中。
对于输入输出流的理解是相对于程序本身而言的,将一个文件中的数据读取出来写入到程序里面,这样的是输入流,而将程序中的数据写入到一个文件中这样的是输出流,这个输入和输出可以理解为相对程序来说是输入还是输出来定义。
PrintWriter和BufferedWriter的区别
BufferedWriter是带有缓冲区的字符写入流,但是没有自动换行功能,必须手动加。
PrintWriter带有自动换行,而且支持直接发送,比如构造方法设置为new PrintWriter(xx,ture);这样设置对方可以直接读取,而不需要增加手动换行。
我用fileWriter和bufferedwriter写入文件,为什么写进去就是乱码呢
使用字节流OutputStream可以直接输出,现在要是用到字符流处理的话,也当年困扰到我,现在将分析码写下来共参考:
//FileReader fr = new FileReader("d:/d.txt");
//BufferedReader br = new BufferedReader(fr);
以上注释是常规写法,处理英文好使,处理中文就改为以下写法
FileInputStream fr = new FileInputStream(new File("d:/d.txt"));
InputStreamReader brs = new InputStreamReader(fr,"GBK");
BufferedReader br = new BufferedReader(brs); 把filewriter的写法写成FileinputStream形式,在GBK即可。
BufferedWriter和FileWriter的区别
BufferedWriter
1.有缓冲区(默认8192 字符 =16384字节) private static int defaultCharBufferSize = 8192;
可以通过构造方法来修改(一般不需修改) public BufferedWriter(Writer out, int sz )
2.由于有缓冲区所以效率要比 FileWriter高
3.缓冲区能缓存8192个字符 满了或者close、flush之后才会进行查码表
之后再缓存在StreamEncoder的缓冲区中(8192字节)
4.内部是使用 FileWriter 来读写的
FileWriter
1.其实内部也有缓冲区(8192 字节 )
private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;
2. FileWriter 效率低
3.来一个字符查一次码表
缓冲在StreamEncoder的缓冲区中(8192字节)
是父类OutputStreamWriter 中private final StreamEncoder se(负责查码表)的缓冲区