IO(其他流的使用)

其他流的使用(1- 输入、输出流 2-打印流 3- 数据流 4- 对象流 )

内容:

1-输入、输出流:

public static void main(String[] args) {
        //1- 标准的输入,输出流
        BufferedReader bufferedReader = null;
        try {
            //这个部分可以不用修改
            InputStreamReader inputStreamReader = new InputStreamReader(System.in);
            bufferedReader = new BufferedReader(inputStreamReader);
           //按照自己需求修改
            while (true) {
                System.out.println("请输入内容");
                String date = bufferedReader.readLine();
                if ("e".equals(date) || "exit".equals(date)) {
                    System.out.println("你已经输入e/exit,退出");
                    break;
                }
                String upperCase = date.toUpperCase();//将内容转化成大写
                System.out.println(upperCase);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null)
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }

2- 打印流

//打印流
    //打印流--会使本来应该出现在终端的文件,出现在你"规定的文件"里面
    @Test
    public void test2() {
        PrintStream printStream = null;
        try {
            //常规打印流操作(开头的这一段,可以不用修改)
            FileOutputStream fileOutputStream = new FileOutputStream(new File("/Users/ccc/Desktop/testIO/I_Love.txt"));
            printStream = new PrintStream(fileOutputStream, true);
            if (printStream != null) {
                System.setOut(printStream);
            }
            //具体出现的内容(下面这段,循环操作的,内容,可以修改成你需要的--代码)
            for (int i = 0; i <= 100; i++) {
                System.out.println("我爱你");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (printStream != null)
                try {
                    printStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }

    }

3- 数据流

// 数据流
    //DateInputStream 和 DataOutputStream
    //作用:用于"读取"或者"写出"基本数据类型的变量或者字符串(使数据持久化,就把它变成一个文件的形式)
    @Test
    //注:这里的异常,还是应该ry-catch,我只是为了,代码块的简洁,才用throws
    public void test() throws IOException {
        //持久化文件的路径
        DataOutputStream dateOutputStream = new DataOutputStream(new FileOutputStream("/Users/ccc/Desktop/testIO/DataPersistence.txt"));
        dateOutputStream.writeUTF("陈谢谢");
        dateOutputStream.flush();
        dateOutputStream.write(17);
        dateOutputStream.flush();
        dateOutputStream.writeBoolean(true);
        //注意:这样生成的文件,不能"双击打开直接读",应该用--DateInputStream来读(在下面)
    }

    @Test
    public void test1() throws IOException {
        //1-读取"上面"持久化文件的路径
        DataInputStream dataInputStream = new DataInputStream(new FileInputStream("/Users/ccc/Desktop/testIO/DataPersistence.txt"));
        //2- 按顺序,从头到尾,读取信息
        String s = dataInputStream.readUTF();
        int i = dataInputStream.readInt();
        boolean b = dataInputStream.readBoolean();
        System.out.println(s);
        System.out.println(i);
        System.out.println(b);

        dataInputStream.close();
    }

4- 对象流

对象流的理解:

对象流
1- ObjectInputStream 和 ObjectOutputStream
ObjectInputStream -- 序列化---"保存""基本数据类"或者"对象"的机制
ObjectOutputStream --反序列化 --"读取""基本类型数据"或者"对象"的机制

2- 作用:用于"储存和读取--基本数据类型"或者"对象"的处理流。他的强大之处就是可以吧java中的对象写到数据源中
     也可以吧对象从数据源汇总还原回来。

对象流的--序列号和反序列化

public class Object_InputOutputStreamTest {
    @Test
    public void testObjectOutputStream() {
        //序列化
        //-将终端中的java对象,保存到文件形式 --(写出的形式)
        ObjectOutputStream objectOutputStream = null;
        try {
            //1-
            objectOutputStream = new ObjectOutputStream(new FileOutputStream("Object.txt"));
            //2-
            objectOutputStream.writeObject(new String("我爱你-我滴宝"));
            //3-
            objectOutputStream.flush();//刷新
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (objectOutputStream != null) {
                try {
                    //4-
                    objectOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } //创建的-Object.txt不能"双击"直接打开看,如果想看,要用"反序列化"来看
    }
    @Test
    public void testObjectInputStream () {
        ObjectInputStream objectInputStream = null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream(new File("Object.txt")));
            Object read = objectInputStream.read();
            //String s = (String) read;
            System.out.println("对上面的文件,进行反序列化的内容 = "+read);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(objectInputStream != null)
                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    //附加:如果那些要对"自定义类",进行,反序列化操作  eg:person、account
    //1- 在"自定义类"上要实现 --接口:Serializable
    //2- 单曲类提供一个,全局变量:serialVersionUID
    //3- 除了"第一个类person"如果后面还有dog、cat类,都需要执行(上面1-2)操作,必须保证内部属性也是必须可序列号的
        //(默认情况,基本数据类型可序列号)

}

posted on 2022-06-15 14:07  陈嘻嘻-  阅读(51)  评论(0编辑  收藏  举报

导航