欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > I/O流的设计模式,分类,抽象类还有常用流

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

2025/1/10 1:25:56 来源:https://blog.csdn.net/qq_55332182/article/details/140397352  浏览:    关键词: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)

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

序列化和反序列化

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com