java character和byte_字符(Character)流与字节(Byte)流

先说说区分:

字节流按字节读写,字符流按字符读写。字节流属于全能流,可以读取任意形式的二进制流。字符流只能读取字符文本此类。

比较好区分的方法:

以Stream结尾的相关流类都是字节流,以reader、writer结尾的都是字符流。字符流使用缓冲区作为中介帮助读写流文件。好处显而易见,多了一个缓冲区。不够好的地方就是不显示flush、close的话可能导致本次操作白给。

fileOutputStream.write(new String("hello dabai").getBytes());

如上字节流即便不手动close 内容也能写入。

fileWriter.write("hello dabai");

上述字符流如果不手动flush的话那就白给了。

一般情况下,可以认为字节流更好,因为用的比较多,使用场景也更常见。

流的分类:

InputStream是所有字节输入流的祖先,OutputStream是所有字节输出流的祖先,都是抽象类,都实现了closeable接口,其中OutputStream还实现了Flushable接口。

Reader是所有读入字符串输入流的祖先,Writer是所有写出字符串输出流的祖先,两类中都有char类型的数组作为缓冲,Reader实现了 Readable, Closeable 两接口,Writer实现了Appendable, Closeable, Flushable接口。同时这两个抽象类属性都包含一个属性

protected Object lock;

该属性在构造函数中指向当前类this,在Writer中write方法使用synchronized加了锁

3cf05ce33af2c06f57b9916797102b5f.png

在Reader中则是提供了一个抽象方法交给子类实现

95982ad4202ac6ea703eb0d1a7387595.png

InputStream、OutputStream都用于处理二进制数据,即处理字节。但实际上处理字符的情况也不少,所以有了字符流,它是按照jvm的encode来处理的,进行字符集的转化。二者可以通过InputStreamReader和OutputStreamWriter关联,这两个类分别继承自Reader、Writer。构造函数都需要一个字节流对象,InputStreamReader类中包含一个属性StreamDecoder,OutputStreamWriter类中包含一个属性StreamEncoder,这类属性也是实际完成read、write、close以及flush的对象。这类属性同样属于Reader、Writer的子类,但是他们对Stream进行对应的字符编码并进行字符形式的输入输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值