韩顺平0基础学java——第31天

p612-637

IO流

IO流原理及流的分类
Java lO流原理
1.I/O是Input/Output的缩弓,IV/O技术是非常实用的技术,用于处理数据传输。
如读/写文件,网络通讯等。
2. Java程序中,对于数据的输入/输出操作以”流(stream)”的方式进行。

3. java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方
法输入或输出数据

字节流:二进制文件

字符流:文本文件

Java的IO流共涉及40多个类,心儿都碎了

字节流

lnputStream:字节输入流

lnputStream抽象类是所有类字节输入流的超类lnputStream常用的子类
1.FilelnputStream:文件输入流
2.BufferedInputStream:缓冲字节输入流

3.ObjectInputStream:对象字节输入流

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Day31 {
    public static void main(String[] args) {
        new Day31().read1();
    }
    FileInputStream fileInputStream = null;

    public void read1(){
        String filePath = "e:\\JAVA\\Ioliu\\day31.txt";
        int readData = 0;
        try {
            fileInputStream = new FileInputStream(filePath);

           while((readData = fileInputStream.read())!=-1){
               //这里汉字乱码了。它按照一个一个字节读取的,而UTF-的格式汉字是3个字节
这里推荐用字符流。目前这种是一个一个字节读,效率比较低。
               System.out.println((char)readData);
           }
        }  catch (IOException e) {
            e.printStackTrace();
        }finally {
            //一定要关闭流,不然浪费资源。
            System.out.println("结束");
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 OutputStream:字节输出流

public void writeFile(){
    //创建输出流

    String filePath = "D:\\madake\\mdk1.txt";
    FileOutputStream fileOutputStream = null;

    try {
        fileOutputStream = new FileOutputStream(filePath, true);//如果不写这个true就会覆盖

        //写入一个字节
       // fileOutputStream.write('m');

        //写入字符串
        String str = "aaaahello!";
       // fileOutputStream.write(str.getBytes());//方法1

        fileOutputStream.write(str.getBytes(),0,str.length());//方法2:0是起始位置,后面的长度是你要写入的长度




    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

文件拷贝

边读编写,使用循环。

buf等使用。


字符流

FileReader和 FileWriter是字符流,即按照字符来操作io


FileReader相关方法:

1) new FileReader(File/String)
2) read:每次读取单个字符,返回该字符,如果到文件末尾返回-1

3) read(char):批量读取多个字符到数组,返回读取到的字符数,如果读到文件末尾返回-1

相关APl:
1) new String(char门:将char[]转换成String
2) new String(char[.off,len):将char[的指定部分转换成String

FileWriter常用方法

FileWriter常用方法
1) new FileWriter(File/String):覆盖模式,相当于流的指针在首端
2) new FileWriter(File/String,true):追加模式,相当于流的指针在尾端.

3) write(int):写入单个字符
4) write(char[]):写入指定数组
5) write(char[].off,len):写入指定数组的指定部分

6) write (string):写入整个字符串
7)write(string.off,len):写入字符串的指定部分
相关APl: String类:toCharArray:将String转换成char[注意:
FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件!

节点流和处理流

节点流和处理流的区别和联系


1.节点流是底层流/低级流,直接跟数据源相接。
2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连[模拟修饰器设计模式]
处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便

对象流


●对象流-ObjectlnputStream和ObjectOutputStream
>看一个需求
1.将int num = 100这个int数据保存到文件中,注意不是100数字,而是int 100,并且,能够从文件中直接限复int 100
2将Dog dog = new Dog(“小黄”,3)这个dog对象保存到文件中,并且能够从文件恢复.·

3.上面的要求,就是能够将基本数据类型或者对象进行序列化和反序列化操作
>序列化和反序列化
1.序列化就是在保存数据时,保存数据的值和数据类型

2反序列化就是在恢复数据时,恢复数据的值和数据类型,注:反序列化的顺序需要和序列化的顺序一致。
3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,
必须实现如下两个接口之一:
>Serializable 这是一个标记接口,里面没有任何方法

>Externalizable 里面有方法需要实现,一般推荐上面的

不同包下的类导入、修改序列化的类问题:0630_韩顺平Java_ObjectInputStream_哔哩哔哩_bilibili

一些处理流

节点流和处理流
>注意事项和细节说明
1)读写顺序要一致
2)要求实现序列化或反序列化对象,需要实现 Serializable
3)序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性:当你修改这个类的时候,只会觉得是版本的修改,而不是全新的类。
4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员

5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

 

打印流:

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值