【java基础】]IO流
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流的更多相关文章
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
随机推荐
- Java GUI学习笔记之初识AWT和Swing
Frame f = new Frame(); //获取显示器的尺寸 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize() ...
- frxReport 设计 (mtm)
► 设计 frxReport frxReport 窗体上放一个 [frxReport] 的控件 双击 [frxReport]控件 进入设置模式 frxReport1.ShowReport() 方 ...
- static cross compile gtk-2.16.6+gtk-directfb+arm-linux (arm-linux-gcc-3.4.4+glib-2.3.5)
----------------------------------------------------------------------- In Ubuntu 10.4 Desktop and & ...
- 跟着 8 张思维导图学习 Javascript
学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...
- LINQ查询返回DataTable类型
个人感觉Linq实用灵活性很大,参考一篇大牛的文章LINQ查询返回DataTable类型 http://xuzhihong1987.blog.163.com/blog/static/267315872 ...
- asp.net 图片下载
string fileName = "123.jpg";//图片名字 string filePath = Server.MapPath(&qu ...
- HTML认识
1.1 认识什么是纯文本文件 txt window自带有一个软件,叫做记事本,记事本保存的格式TXT,就是英文text的缩写,术语上称呼为"纯文本文件" TXT文件,只能保存文本内 ...
- osgearth 配置mapNode TerrainOptions
设置瓦片PagedLOD节点最小可视距离因子,默认是6.0 minTileRangeFactor() Map *map = new Map();WWOptions wwImgGlobe;map-> ...
- mongodb3.2配置文件yaml格式 详解
mongodb3.x版本后就是要yaml语法格式的配置文件,下面是yaml配置文件格式如下:官方yaml配置文件选项参考:https://docs.mongodb.org/manual/ ... #c ...
- 解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
现象: java.lang.NoClassDefFoundError: org/apache/log4j/Level at org.slf4j.LoggerFactory.getSingleton(L ...