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. ios 中的autoresizingMask

    以前对这个知识理解的不太对,看了下面这个地址的文章后,感觉说的对,也没检验,今天实验后,发现是错的...在这里对以前读过此文的朋友表示抱歉. 原文地址如下: http://www.cnblogs.co ...

  2. ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数

    今天遇到一个问题,第一次运行程序时,- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event函数无法调用,第二次就好了 ...

  3. uva 489.Hangman Judge 解题报告

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. iOS 一个控件只能拥有一个父类

    不多说上图.多么惨痛的教训,一个子控件   只有最后的一个被addsubview才会生效.

  5. ios cell展示可滑动的图片

    需求: 点击cell上的图片.图片以原图显示出来,可以放大或缩小.再次点击图片移除图片显示原来界面.(和QQ空间看图片类似) 点击图片实现效果: 1. 自定义一个 UITableView (KDIma ...

  6. ios cell常用属性

    1.设置UITableViewCell的accessoryView 有时候我们需要设置cell的一些样式,比如下图, 这个就是设置了cell的accessory属性的内容,如果我们想在上面显示Swit ...

  7. [Android Pro] How to get recent tasks on Android “L”?

    reference : http://stackoverflow.com/questions/24590533/how-to-get-recent-tasks-on-android-l/2688546 ...

  8. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  9. IIS服务的部署

    1.安装 C:\Windows\Microsoft.NET\Framework\v4.0.30319 aspnet_regiis -i2.添加应用程序,选择Asp.net4.03.应用目录 IIS_U ...

  10. IOS关于录音,播放实现总结

    //音频录制(标准过程5,9更新) 准备:导入AVFoundation框架及头文件 1 设置会话类型,允许播放及录音AVAudioSession *audioSession = [AVAudioSes ...