I/O流的设计模式,分类,抽象类还有常用流

总结1345

即一个设计模式,3种分类,4个抽象类,5个处理流。文章有点长,有需要自行ctrl+f搜索自己需要的内容即可。

一个设计模式——装饰器模式

装饰者模式允许在不改变现有类的基础上增加新的功能。在I/O流中,装饰者模式通过层层包装原始流,比如使用BufferedInputStream包装FileInputStream,可以在读取操作中加入缓冲机制,而无需修改FileInputStream的原有代码。

3个分类

按照流向分为:输入流和输出流
按照数据单位分为:字节流和字符流
按照功能分为:节点流和处理流

输入流和输出流

import java.io.FileInputStream;
import java.io.IOException;
public class InputFile {
    public static void main(String[] args) {
        try{
            FileInputStream file = new FileInputStream("C:\\Users\\book.txt");
            int data;
            while ((data = file.read()) != -1)
                System.out.print((char) data);
        } catch (IOException e){
            System.out.println(e);
        }
    }
}

import java.io.FileOutputStream;
import java.io.IOException;
public class OutputFile {
    public static void main(String[] args) {
        try{
            FileOutputStream file = new FileOutputStream("C:\\Users\\book.txt");
            String text = "test";
            byte[] bytes = text.getBytes();
            file.write(bytes);
        } catch (IOException e){
            System.out.println(e);
        }
    }
}

字节流和字符流

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileRW {
    public static void main(String[] args) {
        try{
            FileReader reader = new FileReader("C:\\Users\\book.txt");
            int data;
            while ((data = reader.read())!=-1){
                System.out.print((char) data);
            }
        } catch (IOException e){
            System.out.println(e);
        }

        try(FileWriter writer = new FileWriter("C:\\Users\\book.txt")){
            String text = "test success";
            writer.write(text);
        } catch (IOException e){
            System.out.println(e);
        }
    }
}

节点流和处理流

public class FileFB {
    public static void main(String[] args) {
        try (
                FileInputStream fileInputStream = new FileInputStream("C:\\Users\\book.txt");
                BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
                FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\book.txt");
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)
        ) {
            int data;
            while ((data = bufferedInputStream.read()) != -1) {
                bufferedOutputStream.write(data);
            }
            bufferedOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四个抽象类

InputStream:所有字节输入流的基类。
OutputStream:所有字节输出流的基类。
Reader:所有字符输入流的基类。
Writer:所有字符输出流的基类。

InputStream

import java.io.FileInputStream;
import java.io.IOException;
public class InputFile {
    public static void main(String[] args) {
        try{
            FileInputStream file = new FileInputStream("C:\\Users\\book.txt");
            int data;
            while ((data = file.read()) != -1)
                System.out.print((char) data);
        } catch (IOException e){
            System.out.println(e);
        }
    }
}

OutputStream

import java.io.FileOutputStream;
import java.io.IOException;
public class OutputFile {
    public static void main(String[] args) {
        try{
            FileOutputStream file = new FileOutputStream("C:\\Users\\book.txt");
            String text = "test";
            byte[] bytes = text.getBytes();
            file.write(bytes);
        } catch (IOException e){
            System.out.println(e);
        }
    }
}

Reader(方法)

try{
	FileReader reader = new FileReader("C:\\Users\\book.txt");
int data;
	while ((data = reader.read())!=-1){
		System.out.print((char) data);
	}
	} catch (IOException e){
		System.out.println(e);
}

Writer(方法)

try(FileWriter writer = new FileWriter("C:\\Users\\book.txt")){
	String text = "test success";
	writer.write(text);
} catch (IOException e){
	System.out.println(e);
	}
}

五种处理流

缓冲流(Buffered)

缓冲流通过使用内部缓冲区来提高效率,在读取或者写入的时候都先在缓冲区操作,当缓冲区满或者达到某个阈值的时候才会与底层设备交互,减少I/O操作次数,提高性能。

转换流(字符流拥有)

InputStreamReader: 将字节流转换为字符流。
OutputStreamWriter: 将字符流转换为字节流。

对象流(字节流拥有)

序列化和反序列化Java对象,允许将对象状态保存到文件中或通过网络传输。
ObjectOutputStream: 将Java对象序列化为字节流。
ObjectInputStream: 从字节流中反序列化Java对象。

打印流(输出流拥有)

PrintStream: 字节流输出打印流,通常用于标准输出和错误输出。
PrintWriter: 字符流输出打印流,用于更复杂的字符输出操作。

过滤流(Filter)

在现有流之上提供额外功能的流,但它们不改变流的基本行为。过滤流通常用于添加特性,如缓冲、数据格式转换等。

序列化和反序列化

因为前面提到了,这里简单说一下。
序列化是指将对象状态抓换为字节序列的过程,这样可以将对象存储到硬盘或者网络上来传输。
反序列化是将字节序列恢复成对象的过程,使得可以恢复对象的状态并继续使用。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值