IO流知识点总结

本文详细介绍了Java中流的概念及应用,包括输入输出流、字节流与字符流的区别和使用场景,并通过实例展示了如何利用不同的流进行文件读写。此外,还深入探讨了对象的序列化与反序列化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 流根据方向分可分为:输入流、输出流,输入输出是相对于内存而言。
  • 根据读取类型的方向可分为:字节流,字符流。
  • 字节流:适合读取图片,视频,音乐等二进制文件(都以stream结尾)
  • 字符流:适合读取存文本文件(都包含Read 或 write)
  • 四大家族(InputStream,OutputStream,Reader,Write)继承关系图
    这里写图片描述
    这里写图片描述
    应用程序中把把输入放入文件中,相当于把一缸水倒入另一缸水中
    字节流:
    FileOutputStream :write();方法相当于一滴一滴的倒入缸中;
    DateOutputStream:write();方法相当于一瓢水一瓢水的放入缸中;
    BufferOutputStream:write();方法相当于一瓢水一瓢水的放入桶中,然后一桶水再倒入缸中;

文本,文件,文本文件的理解:
文本:16位无符号的整数,是字符的unicode编码(双字节编码);
文件:是byte byte byte …的数据序列;
文本文件:是文本(char)序列按照某种编码方式序列化为byte的存储。
字符流:
InputStreamReader 完成byte流解析为char流的过程,按照指定的编码进行解析(默认为GBK);
OutputStreamWrite 完成char流到byte流;按照指定的编码进行解析(默认为GBK);
BufferReader : 一次性读一行
BufferWrite : 一次性写一行
代码使用事例:

//InputStreamReader   FileOutputStream
        FileInputStream file = new FileInputStream("E:\\111.txt");
        InputStreamReader isr = new InputStreamReader(file);
        FileOutputStream out = new FileOutputStream("E:\\222.txt");
        OutputStreamWriter osw = new OutputStreamWriter(out,"gbk");
        int c;
        while((c = isr.read()) !=-1){
            osw.write(c);
            osw.flush();
        }
        isr.close();
        osw.close();

        //BufferedInputStream   BufferedOutputStream
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\111.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\222.txt"));
        int c1;
        byte [] b = new byte[8*1024];
        while((c1 = bis.read(b, 0, b.length)) != -1){
            bos.write(b);
        }
        bis.close();
        bos.close();

        //BufferedReader  BufferedWrite
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\111.txt")));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\333.txt")));
        String line;
        while((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        br.close();
        bw.close();

        //printwrite
        BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\111.txt")));
        PrintWriter pw = new PrintWriter("E:\\444.txt");
        String line1;
        while((line1 = br1.readLine()) != null){
            pw.println(line);
            pw.flush();
        }
        br.close();
        pw.flush();
  • 对象的序列化与反序列化

序列化:将Object对象转成byte ,反正则是反序列化
序列化流:ObjectOutputStream
反序列化流:ObjectInputStream
类需要实现Serializable接口

//序列化
String file = "e:/obj.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
Student student = new Student("11","22","33");
oos.writeObject(student);
oos.close();*/

//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
Student student = (Student)ois.readObject();
System.out.println(student.toString());

--Student类
public class Student implements Serializable{
    private String userName;
    private String id;
    private String age;

    public Student(){

    }


    public Student(String userName, String id, String age) {
        super();
        this.userName = userName;
        this.id = id;
        this.age = age;
    }



    @Override
    public String toString() {
        return "Student [userName=" + userName + ", id=" + id + ", age=" + age
                + "]";
    }


    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值