Java-IO

作者: 森屿暖茶 | 来源:发表于2021-02-07 09:24 被阅读0次

    IO:Java数据的 输入\输出

    数据流:根据流向分为输入流(InputStream\Reader)和输出流(OutputStream\Writer);也可以根据操作的数据单元分为字符流(Reader\Writer)和字节流(Stream)。以适应不同的场景。

    字节流(Stream):一般用来处理图像、视频、PPT、Word等类型的文件。

     InputStream:基于字节的输入操作,定义了所有输入流都具有的共同特征,是所有输入字节流的父类。(输入到内存)

     OutputStream:基于字节的输出操作,定义了所有输出流都具有的共同特征,是所有输出字节流的父类。(输出到文件等)

    字符流(Reader\Writer):一般用于处理txt、文本数据等文本类型的文件

     Reader:基于字符的输入操作,是所有输入字符流的父类。

     Writer:基于字符的输出操作,是所有输出字符流的父类。

    字符提供readline()方法能够一行一行读,字符只能一个字节一个字节读 ;且对中文有区别(英文占1个字节、中文最少占2个字节,中文占一个字符)

    看上面的是不是晕了。

    我们在在流的使用过程之中常常是嵌套处理的,这是一种装饰模式。

    拿字节流来说:DataOutputStream就是装饰FileOutputStream,FileOutputStream就是装饰OutputStream.他们是一种继承修饰拓展的关系。如DataOutputStream是用于修饰流的类型属性,BufferedOutputStream是用于修饰流读取时采用一块一块读的方式(否则字节流读取时一个字节一个字节读取,非常消耗性能),FileOutputStream是用于把文件转换为字节流。这样理解就便于使用众多类型的装饰类。

    ByteArray修饰:从字节数组(byte[])中进行以字节为单位的读取

    Piped修饰:用于多线程的管道通信

    File修饰:跟文件相关的比如从文件输入或者输出到文件。

    Filter修饰:一个过渡的过滤类,没有实际作用,供其他类装饰(Data、Buffered等)。

    Buffered修饰:内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,让流一块一块的读取。而不再是一个一个的读取。优化性能和读取速度。

    Data:用于修饰读取基本 Java 数据类型(把数据修饰为),可以为Boolean、Int、String、Char等一系列类型。

    void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

    void close() :关闭输出流,释放和这个流相关的系统资源。

    字节流

    Buffered:BufferedReader 拥有readline()方法可以读一行的字符。

    InputStreamReader:将字节流以字符流输入。

    OutputStreamWrite: 将字节流以字符流输出。

    void close() :关闭输出流,释放和这个流相关的系统资源。

    RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。在文件里移动用的seek(int dex ){可以将指针移动到某个位置开始读写},setLength(long len){给写入文件预留空间}。

    构造方法:RandomAccessFile randomAccessFile = new RandomAccessFile(File file, String mode);

    其中mode 的值可选 "r":可读 ;   "w" :可写;"rw":可读写;

    应用场景:文件的多线程下载,多个线程对整个文件进行拆分,每个线程下载其中一部分数据流,最终拼接得到完整的文件。

    相关文章

      网友评论

          本文标题:Java-IO

          本文链接:https://www.haomeiwen.com/subject/iluzoktx.html