Java IO 流

1. IO流总述

https://blog.csdn.net/qq_37969433/article/details/79886751

Java IO 流
- 按流向分:输入流、输出流
- 按操作对象分:字节流、字符流
- 按功能分类:节点流处理流
①: IO流的设计模式为 装饰者模式,不是用继承关系来构建的,通过将节点流的对象传入处理流对象的构造方法中,那处理流也就有了节点流的功能,还能进一步的修饰改造
②: 节点流是最为原生态的流,传入需待操作的数据对象, 如File(文件)、Byte[](字节数组)、Char[](字符数组)
③: 处理流包装节点流 , 增强其功能(如处理编码问题防止乱码、使用缓冲流增强传输效率等),其处理的是节点流,所以需用节点流对象创建处理流对象

2. IO流类型举例

https://blog.csdn.net/s21943/article/details/80298943

  1. 常用的节点流
    父类:InputStream、OutputStream、Reader、Writer
    处理文件:FileInputStream 、FileOutputStream、FileReader、FileWriter
    处理数组:ByteArrayInput [Output]Stream、CharArrayReader[Writer]
    处理字符串: 无、StringReader[Writer]
    处理管道数据:PipeInput[Output]Stream 、 PipeReader[Writer]

  2. 常用的处理流:
    缓冲流:Buffered [parentClass],需要对应的父类作为参数构造,增加缓冲的功能,避免频繁读写硬盘可以初始化缓冲数据的大小,由于带了缓冲功能,所系写数据的时候需要使用flush方法。
    转换流:InputStreamReader OutputStreamWriter 实现 字节流到字符流的转换
    数据流:DataInputStream、DataOutputStream 提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。

  3. 其他
    序列化:ObjectInput[Output]Stream ,transient 修饰成员变量,不写入。需要实现Serializable接口,或者Externalizable接口,能手动控制序列化的方式。
    字节流读取中文:由于java使用的是unicode编码,每一个中文字符是占用两个字节的,所以没有只读出其中一个字节并使用的话当然是乱码咯,虽然普通的英文字符也是两个字节的,但是读取的时候将高8位去掉也能回去正确的英文字符,所以没有问题,所以最好还是使用字符流的方式读取好点
    打印流:java.io中专门提供用于打印的流(这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都flush一次)——–注意他们也是属于处理流,只不过这里单独列出来分析而已

    PrintStream–继承自–>FilterOutputStream–继承自–>OutputStream,(它的构造函数需要OutputStream对象)
    System.In====InputStream
    System.Out===PrintStream
    这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP页面的打印会抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路

PrintStream ps=new PrintStream(new OutputStream(“c://…”));

  System.setOut(ps);

  System.Out.println(“jfdajsflkajdf”);//这样将不会在打印到命令行窗口,而是指定的PrintStream目标文件里面去

3. 常用类继承关系图

InputStream
Java IO 流_第1张图片
OutputStream
Java IO 流_第2张图片
Reader
Java IO 流_第3张图片
Writer
Java IO 流_第4张图片

IO流总结大全

你可能感兴趣的:(Java基础)