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 2022-08-12 18:31  figh466  阅读(45)  评论(0)    收藏  举报

导航