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. BUG归因

    文字类1.名称不统一:日期/时间,编号/流水号, 2.单元格式 数据类错误:取值错位 编程上 控件类:JS报错 1.框架收缩 2.置灰,限定修改项 3.隐形,不显示 4.XX报错 5.无法输入:自动补 ...

  2. 关于内核调试(Windbg)的虚拟机配置问题

    注:本文配置 环境为VMware® Workstation11.1.2 build-2780323+Windows xp SP2+Windbg 6.12.0002.63 x86 *在win7以后的操作 ...

  3. linux 常用快捷键

    切换中英文输入法 Ctrl+space打开终端 Ctrl+Alt+T 终端下复制粘贴 Ctrl + Shift + c/v

  4. 【leetcode】Regular Expression Matching (hard) ★

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  5. 【mongo】drop不释放磁盘空间

    用drop删除mongo的collection后,其size归零,但是storage仍然是原大小,磁盘空间没有被释放. 要用下面命令释放无用的磁盘空间 mongod -repair

  6. iOS block 的底层实现

    其实swift 的闭包跟 OC的block 是一样一样的,学会了block,你swift里边的闭包就会无师自通. 参考:http://www.jianshu.com/p/e23078c11518 ht ...

  7. 基于Spring的可扩展Schema进行开发自定义配置标签支持

    一.背景 最近和朋友一起想开发一个类似alibaba dubbo的功能的工具,其中就用到了基于Spring的可扩展Schema进行开发自定义配置标签支持,通过上网查资料自己写了一个demo.今天在这里 ...

  8. Crystal Report 遇到需要登录的问题

    解决方式: The advices for crystal report database connection settings: 1, Using ApplyLogOnInfo method in ...

  9. PHP之MVC项目实战

    本文主要包括以下内容 类文件自动加载 路径管理 页面跳转 注册自动加载方法 配置文件系统 cookie session 类文件自动加载 在PHP中使用别的类时,需要载入类文件,如果类很多的话,需要重复 ...

  10. 体系结构设计MVC

    体系结构设计MVC(viso图)GIT: https://coding.net/u/lklzjh/p/travel/git/blob/master/%E4%BD%93%E7%B3%BB%E7%BB%9 ...