java io之输出字符流总结

本文详细介绍了Java中的IO流概念及各类实现,包括抽象基类Writer及其子类如OutputStreamWriter、FileWriter等的功能与用途。重点讲解了字符缓冲流BufferedWriter的工作原理,以及特殊用途的字符流如PipedWriter和StringWriter的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、writer

                writer是一个抽象类,是所有输出字符流的子类,里面主要包含了write(),append(),flush()和close()方法,write和append的作用大致一样,因为append()方法里面调用write写字符的,唯一一点不同的是:1.append可以添加null的字符串,输出为"null"

2.而write会抛出空指针异常。

            类里还将String字符串通过调用String.getChars()方法将字符串转化为char数组,同时还留下了一个write()接口来供继承他的子类使用

2、OutputStreamWriter

        继承了Writer类,但是调用了nio包下的StreamEncoder类的方法来实现功能,构造方法传入的参数是OutPutStream实例和编码实例,所以底层还是字节流,只是增加了编码方法来将字节流转化为字符流。

3、FileWriter

        继承了OutputStreamWriter,内部只有各种构造函数,并且所有构造函数都是使用super()来调用父类的方法来实现功能。

4、FilterWriter

        继承了writer类,自身也是一个抽象类,FilterReader类有各种子类实现各种方法,而FilterWriter没有子类,同时内部实现的方法也都是调用父类Writer内的方法来实现的,可能只是目前留下这个接口,方便之后的调用增加新的子类功能。

5、BufferedWriter

          创建BufferedWriter时,我们会通过它的构造函数指定某个底层字符输出流Writer为参数。当程序中每次将单个字符、数组和字符串写入到BufferedWriter中时、都会检查BufferedWriter中的缓存区是否存满,如果没有存满则将字符写入到缓存区中;如果存满,则调用底层的writer(char[] b, int off, int len)将缓存区中的所有字符一次性写入到底层Writer中。

6、CharArrayWriter

          字符数组输出流、用于将字符写入到内置字符缓存数组char[] buf中、构造函数可以设定缓冲数组大小,当此数组存放满员时会调用Arrays.copyOf()自动扩容、同样与ByteArrayOutputStream相比他也提供了几个操作buf中字符的方法、可使用 toCharArray() 和 toString() 获取数据、还可使用writeTo(Writer out)将buf写入到底层流中。同样在此类上调用 close()、flush()无效,不会产生IOException、并且在关闭该流后仍然可以调用此类中的各个方法。

7、PipedWriter

        PipedReader和PipedWriter与PipedInputStream和PipedOutputStream一样,都可以用于管道通信。PipedWriter是字符管道输出流,继承于Writer;PipedReader是字符管道输入流,继承于Reader,PipedWriter和PipedReader的作用是可以通过管道进行线程间的通讯。两者必须要配套使用。

8、StringWriter

        StringWriter类内部维持了一个Stringbuffer,所有要输出的字符都保存在这个Stringbuffer里,但是并没有对外输出的功能,使用的时候只能打印在ide里,无法输出在文件内。

9、PrintWriter

        PrintWriter提供了PrintStream的所有打印方法,其方法也从不抛出IOException。与PrintStream的区别:作为处理流使用时,PrintStream只能封装OutputStream类型的字节流,而PrintWriter既可以封装OutputStream类型的字节流,还能够封装Writer类型的字符输出流并增强其功能。

        同时,2个类的功能基本相同,PrintStream能做的PrintWriter也都能实现,并且PrintWriter的功能更为强大。但是由于PrintWriter出现的比较晚,较早的System.out使用的是PrintStream来实现的,所以为了兼容就没有废弃PrintStream。 
2个类最大的差别是,PrintStream在输出字符,将字符转换为字节时采用的是系统默认的编码格式,这样当数据传输另一个平台,而另一个平台使用另外一个编码格式解码时就会出现问题,存在不可控因素。PrintWriter在传参数时可由程序员指定字符转换为字节时的编码格式,这样兼容性和可控性会更好。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值