IO流(输入流与输出流)

IO流的分类可以分为以下三种:
第一种:输入流和输出流
按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。
输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类

第二种:字节流和字符流
字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。
字节流操作的数据单元是8位字节,由InputStream和OutputStream作为基类。
字符流操作的数据单元是16为的字符,由Reader和Writer作为基类


第三种:节点流和处理流
按照流的角色来分,可以分为节点流和处理流。
节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。
处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流

1、流:(从流向来说分为两种)

java.io.InputStream 输入流 :从外部存储空间数据读到内存中

java.io.OutputSteam 输出流:从内存中将输入写到外部存储空间 (永久保存,不会自动消失)

2、流:(字节流、转换流、字符流)

字节流:用来操作字节文件,但也可以操作字符文件

               所有字节输入流的超类是:InputStream(抽象类)

                FileInputStream、BufferedInputStream、DataInputStream、ObjectInputStream

                所有字节输出流的超类是:OutputStream(抽象类)

                FileOutputStream、BufferedOutputstrea、DataOutputStream、 ObjectOutputStream

字符流:用来操作字符文件

                Reader : BufferedReader 、 FileReader

                Writer : BufferedWriter 、 FileWriter

转换流:

                InputStreamReader

                OutputStreamWriter

3、序列化

        参与序列化与反序列化的类必须实现java.io.Serializable 接口,并推荐生成序列化ID

        静态属性不参与序列化与反序列化操作

        父类可以序列化,那么子类必然可以序列化,无论子类是否实现java.io.Serializable 接口

        类序列化时,属性引用的对象也会被序列化

        不参与序列化操作的属性需要标记为transient

装饰者模式:
import java.io.*;
import java.util.Scanner;

public class IOWriterReaderTest {

    //装饰者模式
    public static void main(String[] args) throws IOException {

        Scanner input = new Scanner(new File("E:/test/1.txt"));

        String name = input.next();
        System.out.println(name);

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:/test/3.txt"));
        osw.write("Hello");
        osw.flush();
        osw.close();

        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:/test/3.txt"));
        char[] buffer = new char[512];
        int len = -1;
        StringBuffer sb = new StringBuffer();
        while((len = isr.read(buffer)) != -1){
            String str = new String(buffer,0,len);
            sb.append(str);
        }

        System.out.println(sb);  //Hello
        isr.close();
    }
}


版权声明:本文为weixin_44889526原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。