2022-8-9 第八组 曹雨 IO流02
IO流(输入,输出流)
1、按照流向分
- 输入流:从硬盘上读取数据到内存。(读)
- 输出流:从内存写出数据到硬盘。(写)
IO性能很低,因为文件在传输过程中需要多次拷贝。
2、按照操作单元分
- 字符流:是一个字符一个字符的操作。一个字符两个字节,主要用来处理文本文件。比如.java .txt
- 字节流:是一个字节一个字节的操作。二进制操作。操作任意类型的文件。
3、按照角色划分
- 节点流:直接操作一个特定的IO设备
- 处理流:在节点流的基础上,做进一步的处理。
字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 | |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
操作对象 | ObjectInputStream | ObjectOutputStream |
File类对象不能操作文件的内容
流的使用:
输入流:向内存中读数据
字节输入流:
-
创建一个FileInputStream对象
-
定义一个标记,用来控制输入流的读取
-
循环读取,如果取到了-1,说明读到了文件的末尾循环结束
-
关闭流(一定要关!!!!!!!):一般情况下,我们都把他放在finally,或者封装一个工具类
public static void main(String[] args) { try { InputStream inputStream = new FileInputStream("d:/a.txt"); int read; byte []buf = new byte[1024]; while ((read = inputStream.read(buf))!= -1){ System.out.println(new String(buf)); } inputStream.close(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } }
字节输出流
-
使用FileOutputStream构造器:
-
boolean append参数:如果传入true,则代表在原有基础上追加,不覆盖
如果传入false,或者不传,覆盖原有内容 -
写的操作,目标文件如果不存在,会自动新建。
try { OutputStream outputStream = new FileOutputStream("d:/a.txt",false); outputStream.write(98); outputStream.close(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); }
字符处理流
(缓冲流)
实现一个文件内容的复制
public static void main(String[] args) {
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
bufferedReader = new BufferedReader(new FileReader("d:/a.txt"));
bufferedWriter = new BufferedWriter(new FileWriter("d:/b.txt"));
String str = null;
while ((str = bufferedReader.readLine())!=null){
System.out.println(str);
bufferedWriter.write(str);
}
bufferedReader.close();
bufferedWriter.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
序列化
从IO流中恢复对象,将存储在硬盘上或者从网络中接收的数据恢复成对象模型
反序列化:
从IO流中恢复对象,将存储在硬盘上或者从网络中接收的数据恢复成对象模型
使用场景:所有可在网络上传输的对象都必须是可序列化的,
否则会报错,所有保存在硬盘上的对象也必须要可序列化。
如何实现序列化
1.序列化的类要实现Seriallzable接口
2.添加一个序列号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】