java IO流分类

#java 流类图结构:
这里写图片描述
##一、 流的分类

  1. 按数据流的方向不同:输入流,输出流。

  2. 按处理数据单位不同:字节流(InputStream,OutputStream),字符流(Reader,Writer)。
    (1) 字节流:数据流中最小的数据单元是字节。
    (2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

  3. 按功能不同:节点流,处理流。
    (1)程序用于直接操作目标设备所对应的类叫节点流。
    (2)程序通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流。
    ##二、节点流
    ###1. 节点流的类型
    这里写图片描述
    (1)File 文件流。对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。
    (2)Memory
    [1]从/向内存数组读写数据: CharArrayReader与 CharArrayWriter、 ByteArrayInputStream与ByteArrayOutputStream。
    [2]从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。
    (3)Pipe管道流。 实现管道的输入和输出(进程间通信): PipedReader与PipedWriter、PipedInputStream与PipedOutputStream。
    ####字节文件流:

    package com.senior.io;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Arrays;

    public class FileInputStream_FileOutputStream {
    public static void main(String[] args) {
    InputStream input = null;
    OutputStream output = null;
    try {
    File file = new File(“file/file.txt”);
    input = new FileInputStream(file); //没有该文件会FileNotFoundException抛异常
    //FileOutputStream(String name,boolean append) append:是否可以追加文件
    output = new FileOutputStream(“file/file1.txt”,true); //没有该文件会自动创建
    byte[] b = new byte[3];
    int count = -1;
    while((count = input.read(b)) != -1) {
    System.out.println(Arrays.toString(b));
    output.write(b, 0, count);
    }
    output.flush(); //强制刷新暂存区,将所有字节强制输出
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    if (output !=null){
    try {
    output.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if (input != null) {
    try {
    input.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }
    }
    ####字符文件流:

    package com.senior.io;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    import java.io.Writer;
    import java.util.Arrays;

    public class Reader_Writer {
    public static void main(String[] args) {
    Reader reader = null;
    Writer writer = null;
    try {
    File file = new File(“file/file.txt”);
    reader = new FileReader(file);
    writer = new FileWriter(“file/file1.txt”);

    char[] ch = new char[3];
    int count = -1;
    while ((count = reader.read(ch)) != -1) {
    	System.out.println(Arrays.toString(ch)+" " +count);
    	writer.write(ch, 0, count);
    }
    writer.flush();
    } catch (FileNotFoundException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    } finally {
    	if (reader != null) {
    		try {
    			reader.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	if (writer != null) {
    		try {
    			writer.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    			}
    		}
    	}	
    }
    

    }

###2. 节点流执行的图示
这里写图片描述
三、处理流

  1. 处理流的类型
    这里写图片描述
    -(1)Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream。
  • (2)Filtering 滤流:在数据进行读或写时进行过滤:FilterReader与FilterWriter、FilterInputStream与FilterOutputStream。
  • (3)Converting between Bytes and Characters 转换流:按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader):InputStreamReader、OutputStreamWriter。
  • (4)Object Serialization 对象流 :ObjectInputStream、ObjectOutputStream。
  • (5)DataConversion数据流: 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 。
  • (6)Counting计数流: 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream。
  • (7)Peeking Ahead预读流: 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream。
  • (8)Printing打印流: 包含方便的打印方法 :PrintWriter、PrintStream。
  1. 处理流执行的图示
    这里写图片描述
  2. 缓冲流
    【1】对I/O进行缓冲是一种常见的性能优化,缓冲流为I/O流增加了内存缓冲区,增加缓冲区的两个目的:
    (1)允许Java的I/O一次不只操作一个字符,这样提高䇖整个系统的性能;
    (2)由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。

【2】缓冲流:它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,
提高了读写的效率,同时增加了一些新的方法。例如:BufferedReader中的readLine方法,BufferedWriter中的newLine方法
4. 转换流
转换流有两种:
(1)InputStreamReader:将字节流转换为字符流;
(2)OutputStreamWriter:将字符流转换为字节流。
5. 数据流
数据流:DataInputStream和DataOutputStream
(1)DataInputStream和DataOutputStream是面向字节的,因此要使用InputStream和OutputStream。
(2)DataInputStream和DataOutputStream分别继承InputStream和OutputStream,
它们属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。
(3)DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类数据(如:int,double等)的方法。
(4)DataInputStream和DataOutputStream的构造方法:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值