Java 流分成2大类:
1.字节流
2.字符流
顾名思义 字节流就是内容以字节的形式存储在流中,字符流则以字符的形式存储在流中,一般而言,字符流只用来处理纯文本文件,而字节流则可以用来处理文本,图片,视频,音频等。
而对于字符流和字节流来说都可以分成输入输出两部分,所以可以分成:
| 字节流 | 字符流 |
输入流 | InputStream | Reader |
输入流 | OutputStream | Writer |
以上是java流的详细继承图。
很好,有很多人可能有我有一样的疑问。那么InputStream和FileInputStream有什么区别呢?
于是,我去看了JDK api
很明显 ,InputSteam以及其同一层的其他类都是抽象类,是其子类的超类,是不能实例化的。
然后我有很好奇其余这几个类有什么用呢?
我用比较的方式进行了学习。
InputStreamReader :JDK的原话是是 :字节流通向字符流的桥梁。
FileReader:JDK源话用来读取字符文件的便捷类。
BufferReader:
这是JDk原话,我的理解就是他帮你做了缓冲,你可以更快更方便的从流中Read或ReadLin。
-- -- !在这插一下,在查资料过程中,我发现java.io 使用了装饰模式 。
于百度了下装饰模式:
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
这样可能不是很好理解。
BufferedWirter 内部包含了一个真实的Writer ,他将接受到的对象请求转发给真实对象。并在这之前和之后做一些整改、处理。
-- -- ! 插入完毕
现在解释 filterInputStream ,
filterInputStream过滤流,只是简单重新了输入流,具体过滤的方法可以在其子类中重写。
BufferedInputStream是filerInputStream的子类,顾名思义的这是已经经过了缓冲了的InputStream。百度知道的解释是:用这个类来解决"每次要用数据的时候都要进行物理读取"的问题。
好了,这就是我对java文件io流的学习和理解了,如果您看到有什么不对的地方,欢迎指出,谢谢。O(∩_∩)O~~