JAVA基础——JAVA中的流

什么是 JAVA 中的“流”

​ 流是一种抽象出来的概念,当数据在介质中传输,就形成了流,所以流就是用来进行数据的传输的

流的分类

​ JAVA 中的流根据其在方向上、处理数据单元上、使用方式上可以分为很多种类

​ 流可以分为输入流和输出流两大类, I(input)和 O(output),即我们常说的 I/O 流,这里的输入和输出是对 JAVA 程序来说的,数据流向 JAVA 程序时,是流入,即输入流,数据从 JAVA 程序中输出时,是流出,即输出流

​ 又可以根据数据单元的不同,分为字节流和字符流,字节流可以处理所有类型的数据,因为它是一个字节一个字节的去读取数据的,而字符流则更适合处理文本数据,他们和输入流及输出流的概念并不冲突

输入流

​ 输入流是指将数据读入到 JAVA 程序中,包括 ReaderInputStream 以及它们的子类,一下以实例说明用法

    public static void main(String[] args) throws IOException {
        BufferedReader br = null;
        br = new BufferedReader(new FileReader("F://lmh.txt"));
        String str = null;
        while ((str = br.readLine()) != null) {
            System.out.println(str);
        }
        if (br != null) {
            br.close();
        }
    }

​ 这个样例是以 FileReader 为基础,使用包装流 Buffered 包装,将一个文件中的数据读入程序中,所有的输入流中,都包含 read 方法用来读入数据,与字节流不同的是,字符流中的 Reader 支持 readLine 方法,可以将一行数据一次性读入,这也证明了字符流更适合操作文本数据

public static void main(String[] args) throws IOException {
    File file = new File("F:/lmh.txt");
    if (!file.exists())
        file.createNewFile();
    String path = file.getPath();
    byte[] buf = new byte[10000];
    FileInputStream fis = new FileInputStream(path);
    int fisRead = 0;
    fisRead = fis.read(buf);
}

​ 这个样例是一个典型的,使用字节流向 JAVA 程序读入数据的功能,这里的读入使用 read 函数,read 函数有三种使用方法,一种是无参的读入,read() ,它不会存储读入的数据,只是一味的将读入指针在文件中后移,第二种是有参的读入,read(byte[] bt),它会存储读入的数据,保存在名为 bt 的 byte 数组中,第三种是 read(byte[] bt, int orr, int len),它是从输入流读取 len 个字节的数据到 bt 数组,off 为 bt 数组的起始偏移量,这也体现了字符流和字节流在读入数据时的区别

输出流

​ 输出流是将数据从 JAVA 程序输出到控制台或者文件中的流,可以理解为流出 JAVA 程序,包括 WriterOutputStream

public static void main(String[] args) throws IOException {
    BufferedReader br = null;
    BufferedWriter bw = null;
    br = new BufferedReader(new FileReader("F://lmh.txt"));
    bw = new BufferedWriter(new FileWriter("F://lmh01.txt"));
    String str = null;
    while ((str = br.readLine()) != null) {
        bw.write(str, 0, str.length());
        bw.newLine();
    }
    if (br != null || bw != null) {
        br.close();
        bw.close();
    }
}

​ 这个样例是一个先使用 Reader 读入数据,再将读入到的数据使用 Writer 写入另一个文件的功能,使用包装流 BufferedWriterFileWriter 进行包装,可以提高运行效率,在使用 Writer 中定义的 write 方法,将其写入到文件中,write 方法有三种,一种是write(char c),将指定的字符写入,第二种是write(CharSequence cs),将指定的字符序列写入,第三种是write(CharSequence cs, int off, int len),写入字符序列 cs 中从 off 位置开始,长度为 len 的数据

public static void main(String[] args) throws IOException {
    DataInputStream dis = null;
    DataOutputStream dos = null;
    dis = new DataInputStream(new FileInputStream("C://Users//StephenCurry//Desktop//chance//IMA//curry.jpg"));
    dos = new DataOutputStream(new FileOutputStream("C://Users//StephenCurry//Desktop//chance//IMA//curry5.jpg"));
    byte[] bt = new byte[1024000];
    int length = dis.read(bt);
    dos.write(bt, 0, length);
    if (dis != null || dos != null) {
        dis.close();
        dos.close();
    }
}

​ 这个样例就比较有趣了,使用字节流读入一张 jpg 的图片,再使用字节流输出到一个空的 jpg 文件中,实现文件的复制,因为是图片,这里必须使用字节流,使用 write 函数,将读入的字节数据,全部写入到另一个文件中,便完成了文件的复制

总结

​ 这里说的只不过是流的简单用法,最重要的是,每种流都有它最擅长的地方,学会在什么情景下使用什么流,才是最关键的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值