Java IO 流分类详解与常用流用法实例
来源:互联网 发布:centos 移除mysql 编辑:程序博客网 时间:2024/06/05 16:01
转:http://www.cnblogs.com/moonpool/p/5488463.html
http://blog.csdn.net/zhangliangzi/article/details/51226652
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义)
注:下表中带下划线的是抽象类,不能创建对象。粗体部分是节点流,其他就是常用的处理流。
流分类使用分类字节输入流字节输出流字符输入流字符输出流 抽象基类InputStreamOutputStream
ReaderWriter节点流访问文件FileInputStreamFileOutStreamFileReaderFileWriter访问数值ByteArrayInputStreamByteArrayOutStreamCharArrayReaderCharArrayWriter访问管道PipedInputStreamPipedOutStreamPipedReaderPipedWriter访问字符串 StringReaderStringWriter处理流缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter转换流 InputStreamReaderOutputStreamWriter对象流ObjectInputStreamObjectOutputStream 抽象基类(过滤)FilterInputStreamFilterOutputStreamFilterReaderFilterWriter打印流 PrintStream PrintWriter推回输入流PushbackInputStream PushbackReader 特殊流DataInputStreamDataOutputStream
——————————————————————————————————————————————————————————————————
总结:
1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。
2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数。
3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。
4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。其中read()方法如果返回-1,代表已经读到数据源末尾。
Java把所有的有序数据都抽象成流模型,简化了输入输出,理解了流模型就理解了Java IO。可以把流想象成水流,里面的水滴有序的朝某一方向流动。水滴就是数据,且代表着最小的数据流动单位,在字节流中,水滴就是一字节(byte),在字符流中,水滴就是一字符(char)。
Java流的分类方法大致分为以下几种:
1、按流向划分,分为输入流、输出流
请注意,这里的流向是以程序的运行时内存为参照的。
输入流类名中包含关键字InputStream或Reader,输出流类名中包含关键字OutputStream或Writer。
2、按操作的数据单元类型划分,分为字节流、字符流
字节流操作的数据单元是8位的字节(byte),字符流操作的是16位的字符。
字节流类名中包含关键字InputStream或OutputStream,字符流类名中包含关键字Reader或Writer。
请注意,系统输入输出(System.in与System.out)都为字节流。
3、按流的角色来划分,分为节点流与处理流
节点流是指程序可以向一个特定的节点读写数据,直接连接数据源;
这个节点最常见的是文件,类名中包含关键字File;还可以是数组、管道、字符串,关键字分别为ByteArray/CharArray,Piped,String。
处理流并不直接连接数据源,它大多情况是对已存在的节点流进行包装,是一种典型的装饰器设计模式。使用处理流主要是为了更方便的执行输入输出工作,如PrintStream,输出功能很强大,推荐输出时都使用处理流包装。
注意:一个IO流可以即是输入流又是字节流又或是以其他方式分类的流类型,是不冲突的。比如FileInputStream,它既是输入流又是字节流还是文件节点流。
4、一些特别的的流类型
转换流,转换流只有字节流转换为字符流,因为字符流使用起来更方便,我们只会向更方便使用的方向转化。如:InputStreamReader与OutputStreamWriter。
缓冲流,有关键字Buffered,也是一种处理流,为其包装的流增加了缓存功能,提高了输入输出的效率,增加缓冲功能后需要使用flush()才能将缓冲区中内容写入到实际的物理节点。但是,在现在版本的Java中,只需记得关闭输出流(调用close()方法),就会自动执行输出流的flush()方法,可以保证将缓冲区中内容写入。
对象流,有关键字Object,主要用于将目标对象保存到磁盘中或允许在网络中直接传输对象时使用(对象序列化),具体可参看博客Java序列化与反序列化。
推回输入流,有关键字PushBack,当程序调用推回输入流的unread()方法时,系统回把指定数组内容的内容推回到一个推回缓冲区中,在调用read()方法读入内容时,就先从推回缓冲区中读取,直到读完推回缓冲区中内容后才会从原输入流中读取。
必须要掌握的流用法实例:
1、FileInputStream\FileOutputStream\FileReader\FileWriter(使用方法类似)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2、输出处理流PrintStream用法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3、转换流inputStreamReader与缓冲流BufferedReader用法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
4、推回输入流PushbackInputStream
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
5、重定向标准输入\输入
Java的标准输入为System.in默认为键盘输入,标准输入为System.out默认为屏幕输出。可通过setInt(InputStream in)方法与setOut(PrintStream out)方法修改(在这里,连标准输出的字节输出流都被包装成了PrintStream,我们在编程时有什么理由不适用输出流呢?)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
6、对象处理流ObjectInputStream\ObjectOutputStream
对象要想保存在磁盘或在网络上传输,其实体类必须可序列化,它是将对象转化为字节序列,使其可以脱机运行。
要想实现序列化,实体类必须实现java.io.serializable接口。
- Java IO 流分类详解与常用流用法实例
- JavaIO流分类详解与常用流用法实例
- java IO流实例详解
- java IO流的概念与分类
- java IO流的概念与分类
- java常用IO流集合用法模板
- Java IO体系中常用的流分类
- Java 常用IO流操作详解
- Java 常用IO流操作详解
- Java 常用IO流操作详解
- 常用IO流详解
- Java IO流分类整理
- java中的IO流分类
- java io实例详解
- IO流的分类及常用案例
- Java常用IO流
- socket.io用法与实例
- Java io流常用流类 BufferedReader读入详解
- 英语-如何学习
- laravel5.4Excel导入导出,Excel数据导入并把失败数据导出
- bootStrap-table 后台分页超详解?
- MySQL_004_基础_时间日期
- 享受还是行走,这是一个问题。
- Java IO 流分类详解与常用流用法实例
- Redis
- activiti
- Ext JS定义一个新类
- 网易2018内推编程题——操作序列
- Java并发编程(一)——挑战
- ThreadPoolExecutor使用介绍
- 大数加法
- Netty5中文用户手册 Part 1.md