简单写写IO流里的一些高级流

发布时间 2023-12-10 20:04:18作者: 天启A

缓冲流Buffered:缓冲流是一种高级的流,他可以对file类的流进行包装,内部含有一种缓冲池,可以在一定程度上提高IO的读写效率

不过,按实验来看,只要给低级流和缓冲流相似的byte读写,其实两者的性能是差不多的。但是默认情况下缓存流具有8kb的缓冲池,而低级流没有。

下面是缓冲流的基本定义方法,这些流的使用方法和低级流方法差距不大,故不特意提及

                InputStream is = new FileInputStream("io-app2/src/itheima01.txt");
                // 1、定义一个字节缓冲输入流包装原始的字节输入流
                InputStream bis = new BufferedInputStream(is);
 
                OutputStream os = new FileOutputStream("io-app2/src/itheima01_bak.txt");
                // 2、定义一个字节缓冲输出流包装原始的字节输出流
                OutputStream bos = new BufferedOutputStream(os);

转换流InputStream:当你编码程序读取文件出现乱码才会用到这个流,这两个流都是不能独立使用的,都需要封装一个子对象inputstream/outputstream,再指定一个编码表,默认使用utf-8

                // 1、创建一个文件字节输出流
                OutputStream os = new FileOutputStream("io-app2/src/itheima07out.txt");
                // 2、把原始的字节输出流,按照指定的字符集编码转换成字符输出转换流。
                Writer osw = new OutputStreamWriter(os, "GBK");
                // 3、把字符输出流包装成缓冲字符输出流
                BufferedWriter bw = new BufferedWriter(osw);

打印流PrintStream/PrintWriter:这个可以做日志用,修改系统底层的打印流,将想在cmd中输出的东西输出在文本文件中

try ( PrintStream ps = new PrintStream("io-app2/src/itheima09.txt"); ){
            // 把系统默认的打印流对象改成自己设置的打印流
            System.setOut(ps);
 
            System.out.println("烈士暮年");    
            System.out.println("壮心不已");
        } catch (Exception e) {
            e.printStackTrace();
        }

数据流Data/序列化流Object:数据流就是写特定的数据,我感觉没啥用

序列化流可以把类封装再写到文件中,不过类要提前序列化,要求是implements Serializable

序列化:如何让部分信息不进行序列化?(比如密码等敏感信息)这时需要在类中给其加上transient

例如:private transient String passWord;这里我想起来mybatis里的不被MySQL读取和这个用的差不多,不过那个是注解@transient :transient短暂的;过客

        try (
            // 1、创建一个对象字节输入流管道,包装 低级的字节输入流与源文件接通
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("io-app2/src/itheima11out.txt"));
        ){
            User u = (User) ois.readObject();
            System.out.println(u);
        } catch (Exception e) {
            e.printStackTrace();
        }

反序列化:

        try (
                // 2、创建一个对象字节输出流包装原始的字节 输出流。
                ObjectOutputStream oos =
                        new ObjectOutputStream(new FileOutputStream("io-app2/src/itheima11out.txt"));
                ){
            // 1、创建一个Java对象。
            User u = new User("admin", "张三", 32, "666888xyz");
 
            // 3、序列化对象到文件中去
            oos.writeObject(u);
            System.out.println("序列化对象成功!!");
 
        } catch (Exception e) {
            e.printStackTrace();
        }