beanshell必备:I/O流使用简单总结
节点流:直接对File类进行操作的文件流
* 流的体系结构: 抽象基类 节点流(或文件流) 缓冲流(处理流的一种) * 字节输入流 InputStream FileInputStream BufferedInputStream * 字节输出流 OutputStream FileOutputStream BufferedOutputStream * 字符输入流 Reader FileReader BufferedReader * 字符输出流 Writer FileWriter BufferedWriter * * 字符流只能处理字符,字节流能处理图片,二进制文件
包装流(处理流):用来修饰节点流
比如:缓冲流加速;
关闭的时候,只需要关闭外层流即可,也就是关闭包装流即可(真正处理读写的是节点流,处理流(包装流)只是一个包装,但是重写了close方法,只要关闭包装流就会自动将节点流关闭)
转换流:进行编码和解码
https://www.cnblogs.com/zsben991126/p/11874832.html
---------------------------------------------------
流的分类:
操作数据单位:字节流 (8bit) ,二进制文件,字符流(字符) ,文本文件
流向:输入流、输出流
流的角色:节点流,处理流/包装流
https://blog.csdn.net/weixin_52574640/article/details/127774908
----------------------------------------------------
字节流
|-InputStream抽象类 |-FileInputStream,文件字节输入流;属于节点流 |-ByteArrayInputStream,字节数组输入流;属于节点流 |-ObjectInputStream,读取对象,即反序列化;属于包装流 |-OutputStream抽象类 |-FileOutputStream,文件字节输出流;属于节点流 |-ByteArrayOutputStream,字节数组输出流;属于节点流 |-ObjectOutputStream,写入对象,即序列化;属于包装流
另外:还有缓冲字节输出流(BufferedOutputStream)、缓冲字节输入流(BufferedInputStream),如果非二进制文件,字节流可以转换为字符流,用缓冲字符输出/输入流即可(BufferedReader/BufferedWriter)。
字符流
|-Reader抽象类 |-FileReader,文件字符输入流;属于节点流 |-BufferedReader,缓冲字符输入流;属于包装流 |-InputStreamReader,将字节输入流转换为字符输入流;属于转换流 |-Writer抽象类 |-FileWriter,文件字符输出流;属于节点流 |-BufferedWriter(缓冲字符输出流;属于包装流) / PrintWriter(打印流,功能更强操作简单;属于包装流) |-OutputStreamWriter,将字节输出流转换字符输出流;属于转换流
总结:
用转换流(OutputStreamWriter)将字节输出流(FileOutputStream)转换为字符输出流(FileWriter),用包装流(BufferedWriter)将字符输出流(FileWriter)包装为缓冲字符输出流(BufferedWriter)
用转换流(InputStreamReader)将字节输入流(FileInputStream)转换为字符输入流(FileReader),用包装流(BufferedReader)将字符输入流(FileReader)包装为缓冲字符输入流(BufferedReader)
写内容到文件
方法一:文件字符输出流
package com.qzcsbj.demo.commons; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * @description : <描述> */ public class Test { public static void main(String[] args) throws IOException { String s = "hello world"; File f = new File("d:/test.txt"); FileWriter fw = new FileWriter(f); // 构建一个文件字符输出流 fw.write(s); fw.close(); } }
方法二:文件字符输出流 + 包装流(缓冲字符输出流)
package com.qzcsbj.demo.commons; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * @description : <描述> */ public class Test { public static void main(String[] args) throws IOException { String s = "hello world"; File f = new File("d:/test.txt"); FileWriter fw = new FileWriter(f); // 构建一个文件字符输出流 BufferedWriter fb = new BufferedWriter(fw); // 包装为缓冲字符输出流 fb.write(s); fb.close(); } }
方法三:字节输出流 + 转换流(将字节输出流转换字符输出流)
package com.qzcsbj.demo.commons; import java.io.*; /** * @description : <描述> */ public class Test { public static void main(String[] args) throws IOException { String s = "hello world"; File f = new File("d:/test.txt"); FileOutputStream out = new FileOutputStream(f); // 构建一个字节输出流对象 Writer w = new OutputStreamWriter(out); // 字节输出流转成字符输出流,OutputStreanWriter是Writer的子类 w.write(s); w.close(); } }
方法四:字节输出流 + 转换流(将字节输出流转换字符输出流) + 包装流
package com.qzcsbj.demo.commons; import java.io.*; /** * @description : <描述> */ public class Test { public static void main(String[] args) throws IOException { String s = "hello world"; File f = new File("d:/test.txt"); FileOutputStream out = new FileOutputStream(f); // 构建一个字节输出流对象 Writer w = new OutputStreamWriter(out); // 字节输出流转成字符输出流,OutputStreanWriter是Writer的子类 BufferedWriter bw = new BufferedWriter(w); // 用包装流(BufferedWriter)将字符输出流(FileWriter)包装为缓冲字符输出流(BufferedWriter) bw.write(s); bw.close(); } }
public class Test { public static final int _1MB = 1024 * 1024; public static byte[] allocation1 = new byte[4 * _1MB]; public static byte[] allocation2 = new byte[4 * _1MB]; public static byte[] allocation3 = new byte[4 * _1MB]; public static void main(String[] args) { } }
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!