Java 中的写入

 public static void main(String[] args) throws Exception {

        FileOutputStream fileOutputStream = new FileOutputStream("1.txt");
        fileOutputStream.write("sdf".getBytes());
 }

这样,就是把字符串 “sdf” 写到硬盘上了。


FileOutputStream 继承自 OutputStream,而后者是抽象类,代表的是向外输出的一种意图。

一个抽象类能指望它干什么实在事?

所以 FileOutputStream 也就是第一个干实事的类,工作机制也很简单,字符串转化为字节流,然后把字节流写入到硬盘上。

至于字符串和字节流的映射就是编码的事情了。


flush 方法继承自 OutputStream,FileOutputStream 的实现就是个空函数。

flush 的本意就是对提供了缓存的输出流,一个强制将缓存中数据 flush 的办法。

所以没有提供缓冲功能的 FileOutputStream 的 flush 方法自然是个空方法了。


听说是有个缓冲区,性能会更好,我又不是学底层的,他们说好就好呗。

一个比较争议的问题是,FileWriter 提不提供缓冲功能?

 public static void main(String[] args) throws Exception {

        Writer writer = new FileWriter("1.txt");
        writer.write("sdf");
 }

运行后发现,数据没有写到文件了,必须要调用下 flush 方法才行。


其实是有缓冲区

public class StreamEncoder extends java.io.Writer {
    private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;
    private volatile boolean isOpen;
    private java.nio.charset.Charset cs;
    private java.nio.charset.CharsetEncoder encoder;
    private java.nio.ByteBuffer bb;
    private final java.io.OutputStream out;
    private java.nio.channels.WritableByteChannel ch;
    private boolean haveLeftoverChar;
    private char leftoverChar;
    private java.nio.CharBuffer lcb;
就是通过这个类,ByteBuffer 和 CharBuffer 一应俱全,这个类哪冒出来的我也不知道,反正来自 Sun。


另外一个类 BufferWriter,也提供了缓存功能,

而在 nio 中,为所有类型提供了缓存功能。


这设计的还真是。。。。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值