Day09字符流缓冲流序列化流IO框架

news2024/12/25 2:35:13

字符流

FileReader(文件字符输入流)

 使用文件字符输入流,有啥好处?

               读取中文不会出现乱码问题 

FileWriter(文件字符输出流) 

 

利用字符流将一个文本文件复制到E:盘下,例如:D:/1.txt复制到E:/2.txt

请使用字符流:FileReader和FileWriter实现

public class Test {

    public static void main(String[] args) throws IOException {


        try ( FileReader fr = new FileReader("D:/1.txt");
              FileWriter fw = new FileWriter("E:/2.txt")){
            char[] chars = new char[3];
            int len;
            while ((len = fr.read(chars)) != -1){

                fw.write(chars);
            }
        }catch (Exception e){
            System.out.println("哈哈哈");
        }


    }
}

字节流、字符流的使用场景小结: 

 1.字节流适合做一切文件数据的拷贝(音视频,文本);字节流不适合读取中文内容输出。

 2.字符流适合做文本文件的操作(读,写)。

缓冲流 

 字节缓冲流的作用

1.提高字节流读写数据的性能

2.字节缓冲输入流自带了8KB缓冲池;字节缓冲输出流也自带了8KB缓冲池。 

 

public class Demo1 {
    public static void main(String[] args) throws IOException {

        BufferedInputStream bi = new BufferedInputStream(
                new FileInputStream("E:\\QQmusic\\MV\\赵雷-少年锦时 (2015湘江音乐节)(高清).mp4"));

        BufferedOutputStream bo = new BufferedOutputStream(
                new FileOutputStream("E:\\QQmusic\\haha\\赵雷-少年锦时 (2015湘江音乐节)(高清).mp4"));

        byte[] a = new byte[1024 * 1024];

        int len;

        while ((len  = bi.read(a)) != -1){

            bo.write(a,0,len);
        }

        bi.close();
        bo.close();
    }
}

 字符缓冲流

 

public class Demo3 {
    public static void main(String[] args) throws IOException {


        BufferedReader br = new BufferedReader( new FileReader("E:/Code191Day/day09/b-3.txt"));

        BufferedWriter bw = new BufferedWriter(new FileWriter("E:/Code191Day/day09/b-4.txt"));

        String a;

        while ((a = br.readLine()) != null){

            bw.write(a);
            bw.newLine();
        }

        br.close();
        bw.close();
    }
}

 转换流

为了解决不同编码读取出现乱码问题 

 打印流

打印流可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去。 

数据流

允许把数据和其类型一并写出去。 

序列化流 

ObjectOutputStream(对象字节输出流) 

 

public class Demo1 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //0. 准备一个Student对象
        Student student = new Student("张三", 18);

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/Code191Day/day09/c-5.txt"));

        oos.writeObject(student);

        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:/Code191Day/day09/c-5.txt"));

        Student student1 = (Student)ois.readObject();
        System.out.println(student1.getAge());

        ois.close();
    }
}

//学生类
class Student implements Serializable {
    private String name;
    private Integer age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

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

 如果一次要序列化多个对象咋整?

 

public class Demo2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //0. 准备一个Student对象的集合
        List<Student> students = new ArrayList<>();
        students.add(new Student("张三", 18));
        students.add(new Student("李四", 19));
        students.add(new Student("王五", 20));

        //1. 序列化(f-1.txt)
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/Code191Day/day09/c-6.txt"));

        oos.writeObject(students);

        oos.close();

        //2. 反序列化(f-1.txt)

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:/Code191Day/day09/c-6.txt"));

        List<Student> objects = (ArrayList)ois.readObject();

        objects.stream().forEach(System.out::println);


        ois.close();
    }
}

IO框架

 

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

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

相关文章

C语言每日一题(17)数组匹配

牛客网 BC156 牛牛的数组匹配 题目描述 描述 牛牛刚学会数组不久&#xff0c;他拿到两个数组 a 和 b&#xff0c;询问 b 的哪一段连续子数组之和与数组 a 之和最接近。 如果有多个子数组之和同样接近&#xff0c;输出起始点最靠左的数组。 输入描述&#xff1a; 第一行输…

如何在不损失质量的情况下调整图像大小

如何在不损失质量的情况下调整图像大小 如果您在线工作&#xff0c;就会知道图像质量对于呈现干净专业的外观有多么重要。 库存图像和免版税图像很容易找到&#xff0c;但是如何在不损失质量的情况下调整图像大小以使其适合您的目的&#xff1f; 无论您是想将图片用于博客文…

【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 变量 1. 局部变量与成员变量的区别&#xff1a…

小白必看,手把手教你安装Python

目录 一&#xff0c;Python介绍 二&#xff0c;安装 Python 三&#xff0c;各种疑难杂症&#xff1a; 一&#xff0c;Python介绍 Python 是这两年来比较流行的一门编程语言&#xff0c;主要卖点是其相对简单的语法以及丰富的第三方库&#xff0c;下面我来带大家安装、配置 P…

【七】SpringBoot为什么可以打成 jar包启动

SpringBoot为什么可以打成 jar包启动 简介&#xff1a;庆幸的是夜跑的习惯一直都在坚持&#xff0c;正如现在坚持写博客一样。最开始刚接触springboot的时候就觉得很神奇&#xff0c;当时也去研究了一番&#xff0c;今晚夜跑又想起来了这茬事&#xff0c;于是想着应该可以记录一…

Redis数据类型——list类型介绍及基本操作

1.list类型介绍 redis中的list就是一个双向链表的结构 2.list类型数据基本操作

己知一棵有 2011 个结点的树,其叶结点个数为 116,该树对应的二叉树无右孩子的结点个数是

前言 树转二叉树的规则&#xff1a;每个结点左指针指向它的第一个孩子&#xff0c;右指针指向它在树中相邻的右兄弟&#xff0c;即“左孩子右兄弟“。 拓展&#xff1a;树中一个叶子节点在转化为二叉树的时候&#xff0c;如果它有右兄弟&#xff0c;那么它右指针会指向其兄弟节…

【软件安装】Linux系统中安装MySQL数据库服务

这篇文章&#xff0c;主要介绍如何在Linux系统中安装MySQL数据库服务。 目录 一、Linux安装MySQL 1.1、下载MySQL安装包 1.2、解压MySQL安装包 1.3、更改存放目录 1.4、创建用户组和用户 1.5、创建数据目录data 1.6、创建my.cnf配置文件 1.7、初始化数据库 1.8、添加m…

报告从root到sink的clock tree物理长度的脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 距离clock root物理距离最远的sink未必是latency最大的,但是往往clock path的长度受其影响,比如一些寄存器放在距离clock root很远的channel里,与其balance的reg就需要垫 delay detour buffer,即…

【Maven教程】(九):使用 Maven 进行测试 ~

目录 1️⃣ account-captcha 1.1 account-captcha 1.2 account-captcha 的主代码 1.3 account-captcha的测试代码 2️⃣ maven-surefire-plugin 简介 3️⃣ 跳过测试 4️⃣ 动态指定要运行的测试用例 5️⃣ 包含与排除测试用例 6️⃣ 测试报告 6.1基本的测试报告 6.…

鸿蒙应用开发之环境搭建

一、环境搭建 正所谓“工欲善其事&#xff0c;必先利其器”。在正式学习一门课程之前&#xff0c;我们首先需要做的就是搭建开发环境。首先&#xff0c;我们需要下载DevEco Studio&#xff0c;DevEco Studio支持Windows系统和macOS系统&#xff0c;在开发HarmonyOS应用/服务前…

力扣每日一题64:最小路径和

题目描述&#xff1a; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2…

高通Quick Charge快速充电原理分析

1 三段式AC充电器 涓流、恒流、恒压。 2 QC 2.0 2.1 高通Quick Charge 2.0 快速充电原理分析 QC 2.0快速充电需要手机端和充电器都支持才行。 当将充电器端通过数据线连到手机上时&#xff0c;充电器默认的是将D和D-短接的&#xff0c;这样手机端探测到的充电器类型是DCP&#…

【前端】Webpack5中Html和CSS的压缩打包

1.Webpack5简介 1.1.Webpack简介 &#xff08;1&#xff09;webpack的发展历程 2012.3—webpack&#xff08;问世&#xff09; 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5&#xff08;要求node版本10.13&#xff09; &a…

iview项目中,radio选中值回显问题

问题描述&#xff1a;iviewvue项目中&#xff0c;数据从路由传参进入编辑页面&#xff0c;页面的radio选中状态首次显示&#xff0c;浏览器刷新后不显示&#xff1a; 1、首次进入&#xff1a; 2、浏览器手动刷新后&#xff1a; 经查&#xff0c;路由传参的值为字符串&#xff…

【ARM AMBA Q_Channel 详细介绍】

文章目录 1.1 Q_Channel 概述1.2 Q-Channel1.2.1 Q-Channel 接口1.2.2 Q-Channel 接口的握手状态1.2.3 握手信号规则 1.3 P_Channel的握手协议1.3.1 device 接受 PMU 的 power 请求1.3.2 device 拒绝 PMU 的 power 请求 1.4 device 复位信号与 Q _Channel 的结合1.4.1 RESETn 复…

驱动开发5 阻塞IO实例、IO多路复用

1 阻塞IO 进程1 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h>int main(int argc, char co…

真空室的内表面加工

真空室和部件的内表面是在高真空和超高真空下实现工作压力的重要因素。必须在该条件下进行加工&#xff0c;以最小化有效表面&#xff0c;并产生具有最小解吸率的表面。 真空室和部件的表面往往是在焊接和机械加工后经过精细玻璃珠喷砂的。具有限定直径的高压玻璃珠被吹到表面…

Python创建条形图加点重叠

目录 代码效果图 要使用Python的Seaborn库创建一个条形图加点重叠的统计图&#xff0c;可以使用 seaborn.barplot和 seaborn.stripplot函数。以下是一个论文级别的简单示例代码&#xff0c;演示如何创建这种效果的图 代码 import seaborn as sns import matplotlib.pyplot a…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…