字符输出流与序列化

1. 字符流
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入 。可以指定缓冲区的大小,或者接受默认的大小 。在大多数情况下,默认值就足够大了
创建对象
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流
测试构造方法以及write方法
public static void main(String[] args) {try {// 1.创建FileOutputStream输出流,将数据输出到d.txt文件中// true表示写出的数据将会追加文件的末尾, 而不是覆盖原来的数据Writer out = new FileWriter( "d:/demoout/d.txt", true );// 创建BufferedWriter缓冲区输出流, 输出FileWriter流中的数据BufferedWriter bufout = new BufferedWriter( out );// 2.开始往d.txt中写数据//输出单个字符bufout.write( 97 ); //abufout.write( 98 ); //bbufout.write( 99 ); //cbufout.write( 100 );//dbufout.write( 101 );//ebufout.write( 13 );//回车bufout.write( 10 );//换行//输出字符数组bufout.write( "ABCDE\r\n".toCharArray() );//输出字符数组中的一部分,从下标1处(b)开始,输出后面的3个元素(BCD)bufout.write( "ABCDE\r\n".toCharArray(), 1, 3 );//输出字符串bufout.write( "hello\r\n" );//输出字符串中的一部分,从下标1处(e)开始,输出后面的3个字符(ell)bufout.write( "hello\r\n", 1, 3 );// 3.关闭流(释放资源)System.out.println( "成功将数据写入d.txt文件,关闭流..." );bufout.close();} catch (Exception e) {e.printStackTrace();}}
这里大家可以自行测试输出流写出数据的效率
2.练习 2.1.字符写出流测试
把数据写出到指定文件中 。如果文件不存在会自动创建,文件夹不存在会报错
package cn.tedu.out;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;//这个类用来测试字符流输出数据//总结://效率问题:BufferedWriter> FileWriter,因为BufferedWriter底层为了一个char[],默认大小是8*1024字节相当于8K//写出时,把数据填满数组后一把保存在磁盘中,比一个一个给要快,减少了程序和磁盘的交互次数,提高程序的执行效率 。public class Test2_Writer {public static void main(String[] args) {method();// 普通的字符流输出数据method2();// 高效的字符流输出数据}private static void method2() {Writer out = null;try {// 1,创建字符输出流对象//out = new BufferedWriter(new FileWriter("D:\\iotest\\a.txt"));//在覆盖数据out = new BufferedWriter(new FileWriter("D:\\iotest\\a.txt",true));//想追加// 2,开始写出数据out.write(90);out.write(91);out.write(92);out.write("io");out.write("test");} catch (IOException e) {e.printStackTrace();} finally {try {// 3,释放资源,放入finally块中,保证资源一定会被释放out.close();} catch (IOException e) {e.printStackTrace();}}}private static void method() {Writer out2 = null;// 声明变量,因为finally要用try {// 1,创建字符输出流对象// Writer out = new Writer();//报错,因为Writer是抽象类不能new// Writer out = new FileWriter(new File("D:\\iotest\\a.txt"));// out2 = new FileWriter("D:\\iotest\\a.txt");//默认就是覆盖数据的模式// 需求:保持原有数据,在原有数据的末尾处追加数据out2 = new FileWriter("D:\\iotest\\a.txt", true);// true表示要追加数据// 2,开始写出数据out2.write(100);out2.write("hello");out2.write("java");} catch (IOException e) {e.printStackTrace();} finally {try {// 3,释放资源,放入finally块中,保证资源一定会被释放out2.close();} catch (IOException e) {e.printStackTrace();}}}}
2.2.文件复制
前面我们学习了如何通过[字节输入流]和[字符输入流]读取指定文件中的内容
也学习了如何通过[字节输出流]和[字符输出流]如何将数据输出(写入)到指定的文件中