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

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.inSystem.outSystem.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服务器或聊天服务器,它接收许多单独的连接和请求。 这些也可以并行处理,结果具有一些性能增益。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容