EchoDemo's Blogs

Java中的过滤流

1、过滤流介绍

(1)过滤流(Filtered Stream)仅仅是为底层透明地提供扩展功能的输入流(输出流)的包装。这些流一般由普通类的方法(即过滤流的一个父类)访问。

(2)过滤字节流FilterInputStream和FilterOutputStream,它们不是抽象类,它们提供的方法和InputStream和OutputStream类的方法相同。构造方法有:

FilterOutputStream(OutputStream os);

FilterInputstream(InputStream is);

常用的过滤流有BufferedInputStream和BufferedOutputStream(带缓冲区),需要使用已经存在的节点流(直接操作设备的流)来构造,FileInputStream就是节点流,而BufferedInputStream包装了FileInputStream。提供带缓冲的读写,提高了读写的效率。DataInputStream和DataOutputStream(对基本数据类型进行读写操作)。数据输入输出流允许应用程序读写基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取。读写顺序要保持一致。

2、过滤流举例说明

(1)BufferedInputStream和BufferedOutputStream

package com.iotek.inputoutputstream;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedInputOutputStreamDemo {

    public static void main(String[] args) {
        try {//这里不管是读取文件,还是写入文件,都应该是文件,而不是文件夹。
            FileUtil.copyFile(new File("G:\\bookmarks_5_8_18.html"), new File("F:\\test\\test.html"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class FileUtil{
    public static void copyFile(File src,File dst) throws IOException{    
        FileInputStream fileInputStream = new FileInputStream(src);
        FileOutputStream fileOutputStream = new FileOutputStream(dst);
        BufferedInputStream bis = new BufferedInputStream(fileInputStream);
        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
        long time1 = System.currentTimeMillis();
        int data = 0;
        while((data = bis.read())!=-1){//从缓冲区里面读,而不是直接从输入流里面读。
            bos.write(data);//先写到缓冲区,当缓冲区满的时候再一次性写到输出流里面去。
        }
        bis.close();
        bos.close();
        long time2 = System.currentTimeMillis();
        System.out.println("复制完成,一共花费:" + (time2-time1) + "毫秒");
    }
}

(2)DataInputStream和DataOutputStream

package com.iotek.inputoutputstream;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataInputOutputStream {

    public static void main(String[] args) throws IOException {
        /*String name = "zhangsan";
        int age = 10;
        boolean flag = true;
        char set = '男';
        double money = 100.56;

        DataOutputStream dos = new DataOutputStream(new FileOutputStream("f:\\test\\b.txt"));
        dos.writeUTF(name);
        dos.writeInt(age);
        dos.writeBoolean(flag);
        dos.writeChar(set);
        dos.writeDouble(money);
        dos.close();*/

        DataInputStream dis = new DataInputStream(new FileInputStream("f:\\test\\b.txt"));
        //读的顺序必须和写的顺序一致
        System.out.println(dis.readUTF());
        System.out.println(dis.readInt());
        System.out.println(dis.readBoolean());
        System.out.println(dis.readChar());
        System.out.println(dis.readDouble());
        dis.close();
    }
}
🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------