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

avatar
作者
筋斗云
阅读量:1

总结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)

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

序列化和反序列化

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!