IO流

概念:

流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等

一个流,一定能够会有源和去向(目的地),他们可以是计算机内存的某些区域,也可以是磁盘文件,神这可以使internet上的某个URL(地址)

归类:

IO流,大体解释就是input,output流,其间又有很多分类,我们用图表示一下

区分:

图看上去,很简单,可是我们怎么来区分它们呢?

输入,输出流:

很简单,根据数据的走向来说(我们以程序为参考物),读取read的时候,数据由磁盘(或者是别的地方)走向程序,这时候,我们叫它输入流。而当我们通过程序写出什么数据(write)时候,数据由程序走向磁盘(或者是别的地方),我们叫它输出流。还可以这么说:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。

字符流,字节流:

程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。举个例子就是:像我们中国的汉字,一个汉字占两个字节,如果用字节流处理的话,打印出来就全是??????,因为不能打印半个字不是?所以我们就用字符流来处理。但是如果是音频文件,图片,歌曲用字节流挺好

节点流,处理流:

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。(可参考晨阳师姐的博客:JavaI/O—梳理各种流

常用的各种流:

常用的节点流 

  父 类: InputStream OutputStream Reader Writer 

  文 件 :*FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流 

  数 组 :*ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处                         理的节点流(对应的不再是文件,而是内存中的一个数组) 

  字符串 :*无  无 StringReader StringWriter 对字符串进行处理的节点流 

  管 道 :*PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流 





常用处理流(关闭处理流使用关闭里面的节点流) 

  父 类:InputStream OutputStream Reader Writer 

  缓冲流: *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参                         数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,                        所以就写数据的时候需要使用flush方法咯 

  转换流 :*InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作为参数,实现从字节                          流到字符流的转换 

  数据流 :*DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什                            么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果                                 我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这                                    种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让
                                      程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的                                             数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的                                             需求。 

   对象流: *ObjectInputStream ObjectOutputStream

   打印流: *PrintStream,PrintWriter这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都                      flush一次)

       (补充部分均来自网页上的资料)

总结:

通过对视频的理解,我认为 IO流里面的各种流其实是相互嵌套使用的,并没有严格的界限,例如:处理流连接已存在的流(节点流,处理流)之上,通过对数据的处理位程序提供更加强大的读写功能。他们之间是相辅相成的。

除了IO流,java里面还有很多别的流,象什么文件流、缓冲流、转换流(转换数据类型),他们之间也会错综复杂的交互,来体现更为强大的功能,没有什么流是自己单独奋战的,组合使用,功能才会更加强大

【java基础】]IO流的更多相关文章

  1. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  2. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  3. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  4. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  5. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  6. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  7. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  8. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  9. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  10. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

随机推荐

  1. 多线程同步_Monitor

    多线程一直在学习和理解中...... Monitor类是多线程中用以实现同步的一种技术,主要是同一进程内多线程间的同步技术. Monitor类中有以下几个方法需要注意: Monitor.Enter(o ...

  2. gtk+-3.21.4 static build step in windows XP

    In recent days the weather is very hot Unable to sleep properly Under the state of daze research gtk ...

  3. 解决VM虚拟机MAC OS X 10.10.x的卡顿问题

    点此链接下载beamoff安装到虚拟机即可.

  4. JS点击灯泡变亮(学自W3school)

    JS学习笔记1(学自W3school)        function changeImage()  {  element = document.getElementByIdx_x('myimage' ...

  5. DropDownList如何添加一个空白的选项

    ddl_class.Items.Insert(0,new ListItem("",""));

  6. jquery 建议编辑器

    用谷歌搜索找了很久,发现所有的插件都是功能太复杂,不是我想要的.所以,我决定我自己来实现需要的编辑功能.刚开始我觉得应该要花费很多的时间,因为我想象内容编辑功能应该是很复杂的. 但事实证明,它是如此简 ...

  7. July 5th, Week 28th Tuesday, 2016

    If you smile when no one else is around, you really mean it. 独处的时候你的笑容才是发自内心的笑容. Human beings are so ...

  8. 多线程编程3 - GCD

    一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Gr ...

  9. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]

    平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...

  10. 数据结构和算法 c#– 1.单项链表

    1.顺序存储结构 Array 1.引用类型(托管堆) 2.初始化时会设置默认值   2.链式存储结构 2.1.单向链表 2.2.循环链表 2.3.双向链表