IO流知识点总结

  • 流根据方向分可分为:输入流、输出流,输入输出是相对于内存而言。
  • 根据读取类型的方向可分为:字节流,字符流。
  • 字节流:适合读取图片,视频,音乐等二进制文件(都以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;
    }


}
很抱歉,作为文本AI助手,我无法绘制思维导。但是,我可以为您提供一个简要的java IO流知识点总结。 Java IO流是Java中用于处理输入和输出的机制。它提供了一种有效的方式来读取和写入数据,以及与文件、网络和其他设备进行交互。 Java IO流包括字节流和字符流两种类型。字节流以字节为单位进行操作,适用于处理二进制数据。而字符流以字符为单位进行操作,适用于处理文本数据。 常用的字节流包括InputStream和OutputStream类,用于读取和写入字节数据。常用的字符流包括Reader和Writer类,用于读取和写入字符数据。可以通过使用字节流和字符流的组合来实现不同类型数据的读写操作。 在Java IO流中,还有一些特殊的流,如缓冲流、转换流、对象流等。缓冲流提供了缓冲区来提高IO性能。转换流用于处理字符编码和解码。对象流用于对Java对象进行读写操作。 此外,Java IO流还包括一些常用的类和方法,如File类用于处理文件和目录,RandomAccessFile类用于对文件进行随机访问,FileInputStream和FileOutputStream类用于读写文件等。 通过组合和使用不同类型的流和类,您可以实现各种复杂的IO操作,如读写文件、网络通信、序列化对象等。 希望这个简要总结对您有所帮助。如果您有任何更具体的问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [万字长文+思维导帮你梳理 Java IO 流,还学不会你来打我(值得收藏)](https://blog.csdn.net/a1405/article/details/116766237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值