Java-IO处理流
Posted 寇大大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-IO处理流相关的知识,希望对你有一定的参考价值。
目录
处理流
缓冲流(Buffering)
缓冲流要”套接“在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
常用构造方法如下:
- 缓冲输入流支持其父类的mark和reset方法。
- BufferedReader提供了readLine方法用于读取一行字符串
- BufferedWriter提供了newLine用于写入一个行分隔符
- 对于输出的缓冲流,写出的数据会现在内存中缓存,使用flush方法将会使内存中的数据立刻写出
缓冲流测试:BufferedInputStream
缓冲流测试:BufferedReader
程序的输入指的是把从文件读取到的内容存储到为程序分配的内存区域里面去。流,什么是流,流无非就是两根管道,一根向里,一根向外,向里向外都是对于我们自己写的程序来说,流分为各种各样的类型,不同的分类方式又可以分为不同的类型,根据方向来分,分为输入流和输出流,根据读取数据的单位的不同,又可以分为字符流和字节流,除此之外,还可以分为节点流和处理流,节点流就是直接和数据源连接的流,处理流就是包在其它流上面的流,处理流不是直接和数据源连接,而是从数据源读取到数据以后再通过处理流处理一遍。缓冲流也包含了四个类:
BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。
流都是成对的,没有流是是不成对的,肯定是一个in,一个out。
转换流
- InputStreamReader 和 OutputStreamWriter 用于字节数据到字符数据之间的转换
- InputStreamReader 需要和 InputStream “套接” 。
- OutputStreamWriter 需要和 OutputStream “套接” 。
- 转换流在构造时可以指定其编码集合
转换流非常的有用,它可以把一个字节流转换成一个字符流
转换流有两种,一种叫InputStreamReader,另一种叫OutputStreamWriter。InputStream是字节流,Reader是字符流,InputStreamReader就是把InputStream转换成Reader。
OutputStream是字节流,Writer是字符流,OutputStreamWriter就是把OutputStream转换成Writer。把OutputStream转换成Writer之后就可以一个字符一个字符地通过管道写入数据了
转换流测试代码
数据流
- DataInputStream 和 DataOutputStream 分别继承自InputStream 和 OutputStream , 它属于处理流,需要分别“套接”在InputStream 和 OutputStream类型的节点流上。
- DataInputStream 和 DataOutputStream 提供了可以存取与机器无关的Java原始类型数据(int,double等)的方法。
- DataInputStream 和 DataOutputStream 的构造方法
数据流测试代码
通过bais这个流往外读取数据的时候,是一个字节一个字节地往外读取的,因此读出来的数据无法判断是字符串还是bool类型的值,因此要在它的外面再套一个流,通过dataInputStream把读出来的数据转换就可以判断了。读取数据的时候是先写进去的就先读出来,因此读ByteArray字节数组数据的顺序应该是先把占8个字节的double类型的数读出来,然后再读那个只占一个字节的boolean类型的数,因为double类型的数是先写进数组里面的,读的时候也要先读它。这就是先写的要先读。如果先读Boolean类型的那个数,那么读出来的情况可能就是把double类型数的8个字节里面的一个字节读了出来。
打印流(Print)
- PrintWriter 和 PrintStream 都属于输出流,分别针对与字符和字节
- PrintWriter 和 PrintStream 提供了重载的print
- Println方法用于多种数据类型的输出
- PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息
- PrintWriter 和 PrintStream有自动flush功能
测试代码
对象流(Object)
直接将Object 写入或读出
- transient关键字(transient:透明的)用它来修饰的成员变量在序列化的时候不予考虑,也就是当成不存在。
- serializable接口
- externaliazble接口
直接实现Serializable接口的类是JDK自动把这个类的对象序列化,而如果实现public interfaceExternalizable extends Serializable的类则可以自己控制对象的序列化,
能让JDK自己控制序列化的就不要让自己去控制
部分图片来源:百度图片
以上是关于Java-IO处理流的主要内容,如果未能解决你的问题,请参考以下文章