美文网首页一个非科班程序员Java IO各种IO
系统学习 Java IO----目录,概览

系统学习 Java IO----目录,概览

作者: czwbig | 来源:发表于2018-11-23 14:04 被阅读1次

    Java IO 类的系统教程,原创。主要参考自英文教程 Java IO Tutorial 和 Java Doc。
    http://tutorials.jenkov.com/java-io/index.html
    目的: 掌握 Java IO 几乎所有类的基础用法,完全知道什么时候应该使用什么类。
    分开学习,先系统学习 IO 所有的类,再另外学习 NIO 。

    目录:

    1. 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
    2. 系统学习 Java IO (二)----IO 异常处理
    3. 系统学习 Java IO (三)----文件类 File
    4. 系统学习 Java IO (四)----文件处理流和随机访问 FileInputStream/FileOutputStream & RandomAccessFile
    5. 系统学习 Java IO (五)----使用 SequenceInputStream 组合多个流
    6. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
    7. 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream
    8. 系统学习 Java IO (八)----装饰流 FilterInputStream/FilterOutputStream
    9. 系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream
    10. 系统学习 Java IO (十)----回退流 PushbackInputStream
    11. 系统学习 Java IO (十一)----打印流 PrintStream
    12. 系统学习 Java IO (十二)----数据流和对象流
    13. 系统学习 Java IO (十三)----字符读写 Reader/Writer 及其常用子类
    14. 系统学习 Java IO (十四)----字符读写缓存和回退 BufferedReader/BufferedWriter & PushbackReader
    15. 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类
    16. 系统学习 Java IO (十六)----这么多类,应该用哪个?

    先放一张 IO 类图,看着有点多(本教程还包含了一些不在这图里的),不要怕,跟着 Jenkov 大神走,一个一个来,都能掌握的。

    部分内容概览

    Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
    System.in, System.out 和 System.err 这三个流也是数据的常见来源或目的地。
    分别对应 InputStream,PrintStream 和 PrintStream
    最常用的可能是 System.out,用于从控制台程序向控制台写入输出。
    当 JVM 启动时,它们由 Java 运行时环境初始化,不必自己实例化(尽管可以在运行时改变它们)
    一个示例如下:

    public class SystemToFile {
        public static void main(String[] args) throws FileNotFoundException {
            System.out.println("print to console"); // 默认输出到控制台
            // 改变 System 输出流,从控制台到文件
            OutputStream output = new FileOutputStream("D:\\out.txt");
            PrintStream printOut = new PrintStream(output);
            System.setOut(printOut);
            System.out.println("now print to File"); // 将输出到文件 D:\out.txt
        }
    }
    
    将流结合起来

    可以将流组合成链,以实现更高级的输入和输出操作。
    例如,从文件中一次读取一个字节的速度很慢。 从磁盘读取更大的数据块然后在字节之后迭代该块字节更快。
    要实现缓冲,可以将 InputStream 包装在 BufferedInputStream 中,
    InputStream input = new BufferedInputStream(new FileInputStream("D:\\out.txt"));
    OutputStream 同理。缓冲只是通过组合流可以实现的效果之一。 还可以将 InputStream 包装在 PushbackStream 中。
    这样,可以将数据推回到流中,以便稍后重新读取。 这在解析过程中有时很方便。 或者,可以使用SequenceInputStream将两个InputStream合并为一个。

    InputStream 类是所有 Java IO 输入流的基类。

    一般直接定义 InputStream 对象,然后指向它的具体子类引用,
    这样做能够处理所有类型的输入流,而不仅仅是具体的子类。

    OutputStream类是所有Java IO输出流的基类。

    同样,一般直接定义 OutputStream 对象,然后指向它的具体子类引用

    Reader 和 Writer

    与 InputStream 和 OutputStream 非常相似,
    但 Reader 和 Writer 是基于字符的。

    Reader 可以与 InputStream 结合使用。 如果你有一个InputStream并想从中读取字符,你可以将它包装在InputStreamReader中。 将InputStream传递给InputStreamReader的构造函数,如下所示:
    Reader reader = new InputStreamReader(inputStream);
    Writer 同样也可以:
    Writer writer = new OutputStreamWriter(outputStream);

    Writer 是其他所有 writer 的父类,下面是一个 Writer 的例子:

    Writer writer = new FileWriter("D:\\out.txt");
    writer.write("Hello Writer");`  
    writer.close();
    

    将 Writers 与 OutputStreams 相结合

    Writer 可以像 Readers 和 InputStream 一样与 OutputStream 结合使用。 将 OutputStream 包装在OutputStreamWrite r中,并将写入 Writer 的所有字符传递给 OutputStream 。 这是一个OutputStreamWriter示例:
    Writer writer = new OutputStreamWriter(outputStream);

    将Readers和Writers结合起来

    就像使用流一样,Reader 和 Writer 可以组合成链,以实现更有趣的 IO。 它的工作原理就像将Reader与 InputStream或者 Writer 与 OutputStream 相结合。
    例如,可以通过将Reader包装在BufferedReader或BufferedWriter中的Writer中来实现缓冲。
    以下是两个这样的例子:

    Reader reader = new BufferedReader(new FileReader(...));
    Writer writer = new BufferedWriter(new FileWriter(...));
    

    有时可能需要同时处理输入和输出。换句话说,可能需要有多个线程处理输入并生成输出。
    例如,可能有一个需要处理磁盘上大量文件的应用程序。 这可以与性能增益并行完成。 或者您可能有一个服务器,如Web服务器或聊天服务器,它接收许多单独的连接和请求。 这些也可以并行处理,结果具有一些性能增益。

    接下来就跟着目录走...

    相关文章

      网友评论

        本文标题:系统学习 Java IO----目录,概览

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