【JAVA】转换流

【转换流】(JDK11之前)

【概述】:

转换流就是来进行字节流和字符流之间转换的

InputStreamReader是从字节流到字符流的桥梁

OutputStreamWriter是从字符流到字节流的桥梁

【构造方法】:

InputStreamReader(InputStream in):创建一个使用默认字符集的InputStreamReader

InputStreamReader(InputStream in, String charsetName):创建一个使用命名字符集的InputStreamReader

OutputStreamWriter(OutputStream out):创建一个使用默认字符集的OutputStreamWriter

OutputStreamWriter(OutputStream out, String charsetName):创建一个使用命名字符集的OutputStreamWriter

例:

        InputStreamReader isr=new InputStreamReader(new FileInputStream("stream_io\\b.txt"),"UTF-8");
        int ch;
        while ((ch=isr.read())!=-1){
            System.out.println((char) ch);
        }
        isr.close();
        OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("stream_io\\c.txt"),"UTF-8");
        osw.write("我爱学习!");
        osw.close();

【字符流】(JDK11之后)

FileReader(File file, Charset charset):创建一个新的FileReader,给出File读取和创建charset

FileReader(String fileName, Charset charset):创建一个给定文件名称的FileReader,给出File读取和创建charset

【注意】:

charset需要通过Charset.forName()获取

例:

        FileReader fr=new FileReader(new FileReader("stream_io\\b.txt", Charset.forName("UTF-8"));

【对象操作流】

【概述】:

可以把对象以字节的形式写到本地文件

【分类】:

对象操作输出流(对象序列化流):就是将对象写到本地文件中,或者在网络中传输对象

对象操作输入流(对象反序列化流):把写到本地文件中的对象读到内存中,或者接收网络中传输的对象

【构造方法】:

ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream

ObjectInputStream(InputStream in):创建一个写入指定的InputStream 的ObjectInputStream

例:

        User user=new User("zhangsan","123");
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("stream_io\\log.txt"));
        oos.writeObject(user);
        oos.close();
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("stream_io\\log.txt"));
        User o=(User)ois.readObject();
        System.out.println(o);
        ois.close();

【注意】:

  • 如果一个对象类的对象能被序列化,那么这个类必须实现一个接口(Serializable)
  • 如果出现InvalidClassException异常,则给对象所属的类加一个serialVersionUID

格式:private static final long serialVersionUID = 长整型数据;

例:

    private static final long serialVersionUID = 42L;
  • 如果一个对象中的某个成员变量的值不想被序列化,就给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

例:

    private transient String password;

【对象操作流——示例项目】

创建多个Javabean类对象写到文件中,再次读取到内存

        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);
        Student s3 = new Student("王五", 25);
        //方法一
        ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("stream_io\\d.txt"));
        oos1.writeObject(s1);
        oos1.writeObject(s2);
        oos1.writeObject(s3);
        oos1.close();
        ObjectInputStream ois1 = new ObjectInputStream(new FileInputStream("stream_io\\d.txt"));
        while (true){
            try {
                Object o = ois1.readObject();
                System.out.println(o);
            } catch (EOFException e) {
                break;
            }
        }
        ois1.close();
        //方法二
        ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("stream_io\\e.txt"));
        ArrayList<Student> list=new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        oos2.writeObject(list);
        oos2.close();
        ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream("stream_io\\e.txt"));
        ArrayList<Student> list2 =(ArrayList<Student>) ois2.readObject();
        for (Student student : list2) {
            System.out.println(student);
        }
        ois2.close();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lx_Hy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值