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

news2024/12/25 23:57:55

目录

转换流

代码演示

总结

序列化流&反序列化流

序列化流

构造和成员方法

细节

代码演示

反序列化流

代码演示

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

综合练习

打印流

字节打印流

代码演示

字符打印流

代码演示

总结


转换流

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

代码演示

利用转换流读取-->

    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.coloradmin.cn/o/1302932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一博 - 图解5种Cache策略

文章目录 概述读策略Cache AsideRead Through 写策略Write ThroughWrite AroundWrite Back 使用场景举例 概述 缓存是在系统中存储数据的临时存储器&#xff0c;用于提高访问速度。缓存策略定义了如何在缓存和主存之间管理数据 读策略 Read data from the system: &#x1f5…

Kalman滤波、扩展Kalman滤波、无迹Kalman滤波和异步滤波的原理及其Matlab代码

目录 引言Kalman滤波代码及其结果展示 扩展Kalman滤波代码及其结果展示 无迹Kalman滤波无迹变换无迹Kalman滤波代码及其结果展示 异步无迹Kalman滤波原理代码及其结果展示 引言 本文给出了Kalman Filter&#xff08;卡尔曼滤波&#xff09;、Extended Kalman Filter&#xff0…

八、SSRF服务器端请求伪造漏洞

一、SSRF漏洞介绍 SSRF&#xff1a;全称Server-side Request Fogery(服务器端请求伪造漏洞)&#xff0c;其是攻击者绕过网站的一些过滤&#xff0c;访问或或攻击或控制了一些本不应该访问或接触的内容(拿外网主机当跳板机去窥探内网) 二、SSRF漏洞发现 简单例子①&#xff1…

算法通关村第八关—二叉树的经典算法题(青铜)

二叉树的经典算法题 一、二叉树里的双指针 双指针就是定义了两个变量&#xff0c;在二叉树中有时候也需要至少定义两个变量才能解决问题&#xff0c;这两个指针可能针对一棵树&#xff0c;也可能针对两棵树&#xff0c;姑且也称之为“双指针”吧。一般是与对称、反转和合并等类…

6-6 计算最长的字符串长度

本题要求实现一个函数&#xff0c;用于计算有n个元素的指针数组s中最长的字符串的长度。 函数接口定义&#xff1a; int max_len( char *s[], int n ); 其中n个字符串存储在s[]中&#xff0c;函数max_len应返回其中最长字符串的长度。 裁判测试程序样例&#xff1a; #incl…

algorithm graphics

绘制地图坐标路线_哔哩哔哩_bilibili neo4j test-CSDN博客

【Angular开发】Angular 16发布:发现前7大功能

Angular 于2023年5月3日发布了主要版本升级版Angular 16。作为一名Angular开发人员&#xff0c;我发现这次升级很有趣&#xff0c;因为与以前的版本相比有一些显著的改进。 因此&#xff0c;在本文中&#xff0c;我将讨论Angular 16的前7个特性&#xff0c;以便您更好地理解。…

关于 SAP S/4HANA 中的控制您应该了解什么-Part1

原文地址&#xff1a;What you should know about controlling in SAP S/4HANA. (Part 1) | SAP Blogs &#xff08;自 SAP S/4HANA 版本 1909 起更新&#xff09; 作为一名CO顾问&#xff0c;我对 SAP ERP 中央组件 (ECC) 向 SAP S/4HANA 的演变感到非常兴奋。 自从第一个版…

13.触发器

目录 1、创建触发器 1、创建只有一个执行语句的触发器 2、创建有多个执行语句的触发器 2、查看触发器 1、通过SHOW TRIGGERS查看触发器: 2.在triggers 表中查看触发器信息 3、使用触发器 4、删除触发器 1、创建触发器 MySQL 的触发器和存储过程一样&#xff0c;都是嵌…

高效扫频阻垢装置广谱感应水处理设备介绍工作原理使用参数和选型

​ 1&#xff1a;高效扫频阻垢装置设备介绍 高效扫频阻垢装置是一种通过控制箱释放变频电磁信号&#xff0c;传输到信号放大装置&#xff0c;管道外侧的电磁线圈和电锤产生高频机械振动&#xff0c;在管道和水中传输&#xff0c;通过共振机理破坏水分子之间的氢键&#xff0c;产…

ubuntu 命令行安装 conda

安装包地址&#xff1a; Index of / 找到对应的版本&#xff0c;右键点复制链接 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.shbash Anaconda3-2023.09-0-Linux-x86_64.sh https://linzhji.blog.csdn.net/article/details/126530244

计算机病毒判定专家系统原理与设计《文字提取人工修正》

内容源于网络。网络上流转的版本实在是不易阅读&#xff0c; 又不忍神作被糟蹋故稍作整理&#xff0c;对于内容仍然有识别不准的地方&#xff0c;网友可留言&#xff0c;我跟进修改。 雷 军 &#xff08;武汉大学计算机系&#xff0c;430072) 摘要: 本文详细地描述了…

Excel表格转换word的两个方法

Excel表格想要转换到word文档中&#xff0c;直接粘贴复制的话&#xff0c;可能会导致表格格式错乱&#xff0c;那么如何转换才能够保证表格不错乱&#xff1f;今天分享两个方法&#xff0c;excel表格转换为word文件。 方法一&#xff1a; 首先打开excel表格&#xff0c;将表格…

Linux部署Kettle(pentaho-server-ce-9.4.0.0-343)记录/配置MySQL存储

下载地址 Kettle 是一个开源的数据集成工具&#xff0c;它是 Pentaho Data Integration&#xff08;PDI&#xff09;项目的一部分。要访问 Kettle 的官方网站&#xff0c;可以通过访问其母公司 Hitachi Vantara 的网站来找到相关信息 官方网站&#xff1a;https://www.hitachi…

面试 JVM 八股文五问五答第一期

面试 JVM 八股文五问五答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.JVM内存布局 Heap (堆区&#xff09; 堆是 OOM 故障最主要的发生区域。它是内存…

class074 背包dp-分组背包、完全背包【算法】

class074 背包dp-分组背包、完全背包【算法】 算法讲解074【必备】背包dp-分组背包、完全背包 code1 P1757 通天之分组背包 // 分组背包(模版) // 给定一个正数m表示背包的容量&#xff0c;有n个货物可供挑选 // 每个货物有自己的体积(容量消耗)、价值(获得收益)、组号(分组)…

分布式搜索引擎02

分布式搜索引擎02 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…

小红书笔记种草表现怎么看,营销攻略!

小红书平台的传播&#xff0c;离不开内容种草。当我们撰写好一篇笔记并进行发布后&#xff0c;该如何衡量这篇笔记的种草表现呢?今天我们为大家分享下小红书笔记种草表现怎么看&#xff0c;营销攻略&#xff01; 一、小红书笔记种草衡量指标 想要了解小红书笔记种草表现怎么看…

智能监控平台/视频共享融合系统EasyCVR接入大华SDK后只有一路通道可云台控制该如何解决?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

31、卷积 - 参数 dilation 以及空洞卷积

在卷积算法中,还有一个不常见的参数叫做dilation(中文:膨胀)。 很多同学可能没听说过这个参数,下面看看这个参数有什么作用,用来控制什么的。 我们还是放这个经典的卷积运算图,图中是看不出 dilation 这个参数的存在的。 如果再换一张图呢,发现两图的区别了吗? 没错…