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.添加一个序列号

posted on   figh466  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示