Java

    xiaoxiao2025-04-19  9

    IO技术在Java上是非常常见的,今天来梳理一下IO方面的知识。

    在很长的一段时间里面,我也很困惑,IO里面一大堆,又是InputStream,outputStream 的,然后又是Writer 和 Reader ,仔细一看,唉。有些还带有Buffer的。本来晕头转向的,现在彻底找不到北了。

    首先,先来个分类。分类都一样,按两大类分:

    按照流向分是输入流和输出流,

    按照处理单位分为字节流和字符流

    下面来看看这张图:

    图不是我画的,是别人那里复制粘贴过来的,哈哈。这里粘贴的,在此谢谢了!

    首先要搞清楚一点的是:

    输入流和输出流,什么时候用输入流,什么时候用输出流。所谓的输入输出是相对于程序(内存)来说的,如果是从外面(硬盘)读取数据,那么就用输入流,如果要往外面写出数据,那么就用输出流。就这么简单,不要再迷糊了。

    下面来看字节流和字符流:

    从上面那张图可以看到,字节流都是 InputStream  和 OutputStream 结尾的,而字符流是 Writer 和 Reader 结尾的,这就很好区分了嘛,一看就知道什么是字节流,什么是字符流。好了,搞清楚这个就看下一个问题,什么时候该用字节流,什么时候该用字符流?

    记住,凡是操作文本文件,注意,是文本文件,那么就用字符流。例如:txt记事本文件

    凡是操作的是非文本文件,那么就用字节流,例如:图片,音频,视频。word文档等

    前面不是说文本文件都用字符流去操作么,怎么word是用字节流了呢?这不扯淡么?别,这不是扯淡,word是不是也可以插入图片等,对吧,前面不是说图片是用字节流去操作的么。对吧,还有一点就是word是经过加密了的,只有word软件才能打开,其他软件都不行,对吧,这就对了嘛。所以,word也是用字节流去操作。

    字节流和字符流都搞清楚了,咦,图上面不是还有 buffer 的么?这又是什么鬼,唉。名字上不是很清楚了么,人家是带了个Buffer 缓冲数组的啊,然后就没其他了。

    不过还有一点很重要的是;凡是带有Buffer的,都不具备操作文件的能力,也就是说,它本身是不能去读取和写入东西的,没事可以看看这些buffer的构造方法,带有Buffer的构造方法里面,一般都需要你传入一些inputStream或者outStream,对了,顺便再说一句,虽然不具备读写文件能力,但人家也有close的方法,这是为什么呢?还有为什么,没为什么,你不是传进去一个么?其实关闭的就是你传进去的这个。所以说,close  buffer之后,就不需要对传进去的进行关闭了,没意义的!

    好了,什么基础的理论知识先讲到这里,下面开始学习!代码是最好的老师嘛,对吧,不管什么都要实践一下,

    FileInputStream和FileOutputStream的简单使用

    Java_IO_BufferedIntputStream_And_BufferedOutputStream

    Java_IO_ObjectInputStream_And_ObjectOutputStream

    Java_IO_字节流_Reader_and_Writer

    Java_IO_SequenceInputStream文件的合并

    (后续更新。。。)

    转载请注明原文地址: https://ju.6miu.com/read-1298238.html
    最新回复(0)