Java文件流 字节流和字符流

来源:互联网 发布:淘宝手机详情页装修 编辑:程序博客网 时间:2024/05/23 10:46

Java 流分成2大类:

1.字节流

2.字符流

顾名思义 字节流就是内容以字节的形式存储在流中,字符流则以字符的形式存储在流中,一般而言,字符流只用来处理纯文本文件,而字节流则可以用来处理文本,图片,视频,音频等。

而对于字符流和字节流来说都可以分成输入输出两部分,所以可以分成:

 

     字节流

      字符流     

  输入流  

  InputStream

    Reader

  输入流

 OutputStream  

    Writer

以上是java流的详细继承图。

很好,有很多人可能有我有一样的疑问。那么InputStream和FileInputStream有什么区别呢?

于是,我去看了JDK api 



很明显 ,InputSteam以及其同一层的其他类都是抽象类,是其子类的超类,是不能实例化的。

然后我有很好奇其余这几个类有什么用呢?

我用比较的方式进行了学习。

InputStreamReader :JDK的原话是是 :字节流通向字符流的桥梁。

FileReader:JDK源话用来读取字符文件的便捷类。

 BufferReader:


这是JDk原话,我的理解就是他帮你做了缓冲,你可以更快更方便的从流中Read或ReadLin。

-- -- !在这插一下,在查资料过程中,我发现java.io 使用了装饰模式  

于百度了下装饰模式:

在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的引用(reference)
(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

这样可能不是很好理解。

BufferedWirter 内部包含了一个真实的Writer ,他将接受到的对象请求转发给真实对象。并在这之前和之后做一些整改、处理。

-- -- ! 插入完毕

现在解释 filterInputStream ,

filterInputStream过滤流,只是简单重新了输入流,具体过滤的方法可以在其子类中重写。

BufferedInputStream是filerInputStream的子类,顾名思义的这是已经经过了缓冲了的InputStream。百度知道的解释是:用这个类来解决"每次要用数据的时候都要进行物理读取"的问题。

好了,这就是我对java文件io流的学习和理解了,如果您看到有什么不对的地方,欢迎指出,谢谢。O(∩_∩)O~~

0 0
原创粉丝点击