Java 中的写入

来源:互联网 发布:微信数据保存到sd卡 编辑:程序博客网 时间:2024/05/04 07:11
 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