记 输入/输出流(I/O)和文件操作的理解

最近看了I/O流的相关知识,有太多的类了,搞得特别混淆。
但是!!!
在这里插入图片描述发现如果在操作文件的时候把“流”理解成一根管子,就可以很清楚的辨识和理解了。

套管子,假设如果要对一个文件或者输入的东西进行输入或者输出(写/读)那必定需要使用 FileInputStream/FileOutputStream 或者是FileReader/FileWriter
但他们读的 话只有read()方法一种,单个单个的读取太麻烦了,于是就有BufferedReader的管子嵌套,查API文档在这里插入图片描述readLine()方法 :读取一行文本在这里插入图片描述

哇哦,比起一个一个的读取,一行一行的读取大大减少了磁盘的工作量,那肯定要用BufferedReader类的readLine()方法方法了!

画一张图:
在这里插入图片描述

各个管子的嵌套有File的前缀就是预先处理File文件的,然后如果有Reader后缀,那么后面直接可以加上Buffer缓冲流,没有Reader后缀就要加转换流然后才可以加缓冲流。
写文件同理。

整理了下基本的类java.io包里的类

 字节流---      	   InputStream----FilelnputSteam
                   OutputStream----FileOutputStream
字节缓冲流---       BufferedlnputSteam
	               BufferedOutputStream 
转换流---           InputStreamReader
	                BufferedReader
字符缓冲流---
	                BufferedWriter
                    Reader---FileReader
字符流---
                    Writer----FileWriter
打印流---           PrintStream
数据字节流---       DatalnputStream
                   DataOutputStrean
对象流---           ObjectinputStream
 				   ObjectOutputStream

Serializable接口,对对象进行序列化,我认为没有序列化的情况下,Object*是无法完成对对象的操作的。

上一个简单的Object的代码:
在这里插入图片描述
ObjectTest:

package com.IO;
import java.io.*;

public class ObjectTest {
    public static void main(String[] args){

        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        Student s1 = new Student("Zhangsan",23);
        //Student s2 = new Student("Lisi",24);

        FileInputStream fis = null;
        ObjectInputStream ois = null;

        try {
            fos = new FileOutputStream("doc\\t.tmp");
            oos = new ObjectOutputStream(fos);//捅fos的管子

            oos.writeObject(s1);
            
            fos.flush();//刷新缓冲流
            oos.flush();

            fis = new FileInputStream("doc\\t.tmp");
            ois = new ObjectInputStream(fis);

            Object o = ois.readObject();

            System.out.println(((Student)o).getName()+"|"+((Student)o).getAge());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            //倒着关
        }
    }
}

Student:

package com.IO;

import java.io.Serializable;

public class Student implements Serializable {//序列化
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public Student() {
        super();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值