Java中的IO流③——转换流、序列化流、反序列化流、打印流

目录

转换流

代码演示

总结

序列化流&反序列化流

序列化流

构造和成员方法

细节

代码演示

反序列化流

代码演示

序列化流和反序列化流细节

综合练习

打印流

字节打印流

代码演示

字符打印流

代码演示

总结


转换流

转换流可以将字节流转成字符流,也可以将字符流转成字节流

代码演示

利用转换流读取-->

    public static void main(String[] args) throws IOException {
        /*
        利用转换流按照指定字符编码读取(了解)

        因为JDK11:这种方法已经被淘汰了。替代方案(掌握):
         */

        /*第一种//创建对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\Java学习\\day29-IO(其他流)\\资料\\gbkfile.txt"),"GBK");
        //读取数据
        int ch;
        while ((ch = isr.read()) != -1){
            System.out.print((char)ch);
        }
        //释放资源
        isr.close();*/

        //创建对象
        FileReader fr = new FileReader("E:\\Java学习\\day29-IO(其他流)\\资料\\gbkfile.txt", Charset.forName("GBK"));
        //读取数据
        int ch;
        while ((ch = fr.read()) != -1){
            System.out.print((char)ch);
        }
        //释放资源
        fr.close();
    }

利用转换流写出-->

    public static void main(String[] args) throws IOException {
        /*
        利用转换流按照指定字符编码写出(了解)

        因为JDK11:这种方法已经被淘汰了。替代方案(掌握):
         */

        /*//创建对象
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\b.txt"),"GBK");
        //写出数据
        osw.write("你好你好");
        //释放资源
        osw.close();*/

        //创建对象
        FileWriter fr = new FileWriter("myio\\b.txt", Charset.forName("GBK"));
        //写出数据
        fr.write("你好你好");
        //释放资源
        fr.close();
    }
将本地文件中的GBK文件,转成UTF-8
    public static void main(String[] args) throws IOException {
        /*
        将本地文件中的GBK文件,转成UTF-8
         */

        //JDK11以前的方案
        /*InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\Java学习\\day29-IO(其他流)\\资料\\gbkfile.txt"),"GBK");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\c.txt"),"UTF-8");

        //读取和写出
        int b;
        while ((b = isr.read()) != -1){
            osw.write(b);
        }

        osw.close();
        isr.close();*/

        //JDK11开始的方案
        FileReader fr = new FileReader("E:\\Java学习\\day29-IO(其他流)\\资料\\gbkfile.txt", Charset.forName("GBK"));
        FileWriter fw = new FileWriter("myio\\d.txt",Charset.forName("UTF-8"));

        //读取和写出
        int b;
        while ((b = fr.read()) != -1){
            fw.write(b);
        }

        fw.close();
        fr.close();

    }

利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码

    public static void main(String[] args) throws IOException {
        /*
        利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码
         */

        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\Java学习\\day29-IO(其他流)\\资料\\csb.txt")));
        String line;
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
        br.close();
    }

总结


序列化流&反序列化流

序列化流

构造和成员方法

细节

代码演示

利用序列化流/对象操作输出流,把一个对象写到本地文件中-->

package com.qiong.myobjectstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            需求:
                利用序列化流/对象操作输出流,把一个对象写到本地文件中
            构造方法:
                public ObjectOutputStream(OutputStream out)     把基本流变成高级流
            成员方法:
                public final void writeObject(Object obj)       把对象序列化(写出)到文件中去
         */

        //创建对象
        Student stu = new Student("张三", 23);

        //创建序列化流的对象/对象操作输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myio\\a.txt"));

        //写出数据
        oos.writeObject(stu);

        //释放资源
        oos.close();
    }
}
package com.qiong.myobjectstream;

import java.io.Serializable;

public class Student implements Serializable {
    /*
        Serializable接口里面是没有抽象方法的,标记型接口
        一旦实现了这个接口,就表示当前的类可以被序列化
     */
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

结果:

�� sr  com.qiong.myobjectstream.Student�=߇�.� I ageL namet Ljava/lang/String;xp   t 张三

反序列化流

代码演示

package com.qiong.myobjectstream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectStreamDemo2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        /*
            需求:
                利用反序列化流/对象操作输入流,把文件中的对象读取到程序当中
         */

        //创建对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myio\\a.txt"));

        //读取数据
        Object o = ois.readObject();

        //打印对象
        System.out.println(o);

        //释放资源
        ois.close();
    }
}

结果-->

Student{name = 张三, age = 23}

序列化流和反序列化流细节

综合练习

package com.qiong.myobjectstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class ObjectStreamDemo3 {
    public static void main(String[] args) throws IOException {
        /*
            需求:
                将多个自定义对象序列化到本地文件中,但是对象的个数不确定,该如何操作呢?
         */

        //序列化多个对象
        Student s1 = new Student("张三", 23, "南京");
        Student s2 = new Student("李四", 24, "重庆");
        Student s3 = new Student("王五", 25, "北京");

        ArrayList<Student> list = new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myio\\a.txt"));
        oos.writeObject(list);

        oos.close();
    }
}
package com.qiong.myobjectstream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class ObjectStreamDemo1 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建反序列化流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myio\\a.txt"));
        //读取数据
        ArrayList<Student> list = (ArrayList<Student>) ois.readObject();
        //打印数据
        for (Student student : list) {
            System.out.println(student);
        }
        /*
        结果:
            Student{name = 张三, age = 23, address = 南京}
            Student{name = 李四, age = 24, address = 重庆}
            Student{name = 王五, age = 25, address = 北京}
         */
        //释放资源
        ois.close();

    }
}

打印流

字节打印流

构造方法-->

成员方法-->

代码演示

package com.qiong.myprintStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.nio.charset.Charset;

public class PrintStreamDemo1 {
    public static void main(String[] args) throws FileNotFoundException {
        //创建对象
        PrintStream ps = new PrintStream(new FileOutputStream("myio\\a.txt"), true, Charset.forName("UTF-8"));

        //写出数据
        ps.println(97);
        ps.print(true);
        ps.printf("%s爱上了%s", "阿珍", "阿强");
        /*
            结果:
                97
                true阿珍爱上了阿强
         */

        //释放资源
        ps.close();
    }
}

字符打印流

构造方法

成员方法

代码演示

package com.qiong.myprintStream;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class PrintStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //创建对象
        PrintWriter pw = new PrintWriter(new FileWriter("myio\\a.txt"), true);

        //写出数据
        pw.println("今天你终于叫我名字了,虽然叫错了,但是没关系,我马上改");
        pw.print("你好你好");
        pw.printf("%s爱上了%s","阿珍","阿强");

        /*
        结果:
            今天你终于叫我名字了,虽然叫错了,但是没关系,我马上改
            你好你好阿珍爱上了阿强
         */

        //释放资源
        pw.close();
    }
}

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/237031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】:表的操作

表的操作 一.创建表二.查看表结构三.修改表四.删除表 一.创建表 field 表示列名。 datatype 表示列的类型。 character set 字符集&#xff0c;如果没有指定字符集&#xff0c;则以所在数据库的字符集为准。 collate 校验规则&#xff0c;如果没有指定校验规则&#xff0c;则以…

侯捷C++ 程序的生前死后

生前&#xff1a;CRT startup code 看完课程&#xff0c;能够回答一下问题&#xff1a; C进入点是main()嘛&#xff1f;什么代码比main更早执行&#xff1f;什么代码在main结束后执行&#xff1f;为什么上述代码可以如此行为&#xff1f;Heap的结构如何&#xff1f;I/O的结构…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

代码随想录二刷| 二叉树 |二叉树的所有路径

代码随想录二刷&#xff5c; 二叉树 &#xff5c;二叉树的所有路径 题目描述解题思路递归 代码实现递归 题目描述 257.二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节…

AP9111手电筒专用集成电路芯片 单节干电池 LED手电筒IC

概述 AP9111 是 LED 手电筒专用集成电路芯片 &#xff0c;是一款采用大规模集成电路技术&#xff0c;专门针对单节干电池的 LED 手电筒设计的一款专用集成电路。外加 1 个电感元件&#xff0c;即可构成 LED 手电筒驱动电路板。AP 9111 性能优越、可靠性高、使用简单、生产一致…

Java - JVM内存区域的划分

Java 程序运行时&#xff0c;需要在内存中分配空间。为了提高运算效率&#xff0c;就对空间进行了不同区域的划分&#xff0c;因为每一片区域都有特定的处理数据方式和内存管理方式。 分配&#xff1a;通过关键字new创建对象分配内存空间&#xff0c;对象存在堆中。 释放 &…

编译 Flink代码

构建环境 JDK1.8以上和Maven 3.3.x可以构建Flink&#xff0c;但是不能正确地遮盖某些依赖项。Maven 3.2.5会正确创建库。所以这里使用为了减少问题选择 Maven3.2.5版本进行构建。要构建单元测试&#xff0c;请使用Java 8以上&#xff0c;以防止使用PowerMock运行器的单元测试失…

011 数据结构_哈希

前言 本文将会向你介绍哈希概念&#xff0c;哈希方法&#xff0c;如何解决哈希冲突&#xff0c;以及闭散列与开散列的模拟实现 1. 哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经…

【MATLAB】基于CEEMDAN分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于CEEMDAN分解的信号去噪算法&#xff08;基础版&#xff09; 代码流程图 代码效果图 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复CEEMDAN去噪 本公众号致力于解决找代码难&#xff0c;…

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列 1、队列&#xff1a;先进先出 队列是项的有序集合&#xff0c;其中&#xff0c;添加新项的一端称为队尾&#xff0c;移除项的另一端称为队首。一个元素在从队尾进入队列后&#xff0c;就会一直向队首移动&#xff0c;直到…

最大上升子序列和

欢迎大家到我的博客浏览&#xff0c;请点击 YinKai s Blog。 题目&#xff1a;最大上升子序列和 一个数的序列 bi&#xff0c;当 b1<b2<…<bS 的时候&#xff0c;我们称这个序列是上升的。 对于给定的一个序列(a1,a2,…,aN)&#xff0c;我们可以得到一些上升的子序列…

c语言中怎么把字符串变成浮点型

大家好&#xff0c;今天给大家介绍c语言中怎么把字符串变成浮点型&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 可以使用Python内置函数float()将字符串转换为浮点型。例如&a…

应对复杂环境:配网故障定位系统的挑战与解决方案

随着电力系统的不断发展&#xff0c;配电网络日益庞大&#xff0c;复杂的环境和多样化的故障类型给电网运维带来了巨大的挑战。为了提高配电网络的安全性和可靠性&#xff0c;需要研发一套高效的配网故障定位系统。恒峰智慧科技将探讨这一系统面临的挑战以及解决方案。 一、监测…

【Java 基础】30 JDK动态代理

文章目录 1.定义2.原理3.使用1&#xff09;定义业务接口2&#xff09;实现 InvocationHandler 接口3&#xff09;生成代理类 4.优点5.缺点总结 动态代理是一种重要的 设计模式&#xff0c;它允许在运行时生成代理类来代替实际的类。动态代理主要通过反射机制实现&#xff0c;为…

idea__SpringBoot微服务09——员工管理系统,(Springboot解决乱码),thymeleaf语法,404页面。

员工管理系统 完整项目地址&#xff1a;一、首页实现&#xff08;注意的点&#xff09;二、国际化三、乱码解决四、登录功能实现&#xff08;注意的点&#xff09;五、登录拦截器&#xff08;注意的点&#xff09;六、展示员工列表&#xff08;注意的点&#xff09;1、前端页面…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型&#xff0c;可以从简单的图片描述中生成高质量的提示词&#xff0c;从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

被忽悠选择那些价格昂贵的知识付费平台?我有才知识服务平台手把手教你如何正确选择!

在当今的知识经济时代&#xff0c;一个高效、便捷的知识服务平台对于企业和个人至关重要。然而&#xff0c;市面上的众多知识服务平台中&#xff0c;许多产品存在高昂的费用、无用功能的堆砌、无法定制化等问题&#xff0c;让用户进退两难&#xff0c;甚至被忽悠掉入使用陷阱。…

深度解析TCP协议:特点、应用场景及市面上常见软件案例

目录 引言 TCP的特点 TCP的应用场景 市面上使用TCP的软件案例 引言 TCP&#xff08;Transmission Control Protocol&#xff09;是计算机网络中一种基于连接的、可靠的传输层协议。它具有一系列独特的特点&#xff0c;适用于广泛的应用场景。本文将深入研究TCP的特点、应用…

系统报错;由于找不到hid.dll,无法继续执行代码”的解决方案分享

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“找不到hid.dll&#xff0c;无法继续执行代码”。这个错误提示通常表示计算机缺少了一个重要的动态链接库文件&#xff0c;即hid.dll。本文将详细介绍hid.dll丢失对电脑的影响以及hid.dll是…

了解 git rebase

了解 git rebase 大多数人习惯使用 git merge 将更改从功能分支合并到主分支&#xff0c;但还有其他方法。我们是否曾经遇到过 git rebase 这个术语并想知道它是什么&#xff1f;或者我们可能听说过 rebase 和 merge &#xff0c;但不确定何时使用哪个&#xff1f;不用担心&am…