总结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)
在现有流之上提供额外功能的流,但它们不改变流的基本行为。过滤流通常用于添加特性,如缓冲、数据格式转换等。
序列化和反序列化
因为前面提到了,这里简单说一下。
序列化是指将对象状态抓换为字节序列的过程,这样可以将对象存储到硬盘或者网络上来传输。
反序列化是将字节序列恢复成对象的过程,使得可以恢复对象的状态并继续使用。