【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)

这篇具有很好参考价值的文章主要介绍了【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🎊专栏【JavaSE】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰


【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🎄缓冲流

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

在代码中使用缓冲流(Buffered Streams)有许多好处,特别是在处理I/O操作时,它们可以显著提高性能和效率。缓冲流是一种在内存中创建缓冲区的I/O流,可以将数据暂时存储在缓冲区中,然后一次性地进行批量读取或写入,而不是每次操作都直接与底层数据源(如文件、网络套接字等)交互。

🍔字节缓冲流

原理:底层自带了长度为8192的缓冲区来提高性能

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流
在创建对象的时候还是使用原来的基本流,但是在缓冲流的加持下,提高了基本流读写的效率

🛸一次读取一个字节

package IODemo1;

import java.io.*;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        //创建缓冲流对象
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("G:\\a.txt"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("G:\\copy.txt"));
        //循环读写到目的地
        int b;
        while ((b=bis.read())!=-1){
            bos.write(b);
        }
        bos.close();
        bis.close();
    }

}

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🛸一次读取多个字节

package IODemo1;

import java.io.*;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        //创建缓冲流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("G:\\a.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("G:\\copy.txt"));
        //循环读写到目的地
        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }
        //释放资源
        bos.close();
        bis.close();
    }

}

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🍔字符缓冲流

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

为什么文件有三行数据,但是读出的只有一行呢
因为readline在读取的时候,一次只读一整行,读到回车换行符结束

如何把文件全部都读出来

package IODemo1;

import java.io.*;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("G:\\a.txt"));

        String line;
        while (((line=br.readLine())!=null)){
            System.out.println(line);
        }

        br.close();
    }

}

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🎄转换流

转换流是字符流和字节流之间的桥梁
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🍔利用转换流按照指定的字符编码读取数据

读取数据

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🍔利用转换流按照指定的字符编码写入数据

写入数据

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🍔读写结合,使用转换流读取数据并且写入数据,并且转换编码方式

读写结合

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🛸乱码的解决方法

字节流读取中文会出现乱码,那么我们就要使用字符流
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🎄序列化流(对象操作输出流)

可以把Java中的对象写到本地文件中
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🍔写出一个对象

🛸创建类Student.java

package IODemo2;

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;

    public Student() {

    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

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

注意
这里要加上Serializable接口
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🛸创建类Demo1.java

package IODemo2;

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

public class Demo1 {
    public static void main(String[] args) throws IOException {
        //创建对象
        Student stu=new Student("zhangsan",23);
        //创建序列化流的对象
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("G:\\a.txt"));
        //写出数据
        oos.writeObject(stu);
        //释放资源
        oos.close();
    }

}

🎄反序列化流(对象操作输入流)

可以把序列化到本地文件中的对象,读取到程序中来
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

package IODemo2;

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

public class Demo2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建反序列化流的对象
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("G:\\a.txt"));
        //读取数据
        Object o=ois.readObject();
        //打印对象
        System.out.println(o);
        //释放资源
        ois.close();
    }
}

读取成功
【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

🌺小练习——读写多个对象

注意是多个对象

🛸创建类Student.java

package IODemo2;

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;

    public Student() {

    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

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

🛸创建类Write.Java

package IODemo2;

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

public class Write {
    public static void main(String[] args) throws IOException {
        Student s1 = new Student("zhangsan", 23);
        Student s2 = new Student("lisi", 24);
        Student s3 = new Student("wangwu", 25);

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

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\a.txt"));
        oos.writeObject(list);
    }
}

🛸创建类Read.Java

package IODemo2;

import java.io.*;
import java.util.ArrayList;

public class Read {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("G:\\a.txt"));
        ArrayList<Student>list=(ArrayList<Student>) ois.readObject();//强转
        for (Student student:list){
            System.out.println(student);
        }
        ois.close();
    }
}
🎈结果

一定要先写再读
先执行Write.java
再执行Read.java

【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流),Java基础,java,开发语言,io流

如果大家对于这篇文章有问题,欢迎在评论区进行讨论文章来源地址https://www.toymoban.com/news/detail-713289.html

到了这里,关于【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Django】Task4 序列化及其高级使用、ModelViewSet

    Task4主要了解序列化及掌握其高级使用,了解ModelViewSet的作用,ModelViewSet 是 Django REST framework(DRF)中的一个视图集类,用于快速创建处理模型数据的 API 视图。 Django 的序列化是指将复杂的数据结构(通常是数据库中的模型对象)转换为可以在不同应用程序间传输和存储的格

    2024年02月11日
    浏览(43)
  • java的转换流、压缩流、序列化流、打印流

    一、转换流 转换流属于字符流,也是一种高级流,用来包装Reader和Writer。转化流是字符流和字节流之间的桥梁。转换输入流为InputStreamReader,把把字节流转化为字符流;转化输出流为OutputStreamWriter,把字符流转化为字节流。 应用场景:字节流想要使用字符流中的方法则使用转

    2024年02月09日
    浏览(30)
  • Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)

    一 Web开发模式 1. 前后端混合开发模式 2.前后端分离开发模式 二 API接口 三 restful规范 四 序列化和反序列化 五 drf安装和快速使用

    2024年02月10日
    浏览(41)
  • ctfshow web入门——反序列化

    web254 web255 web256 web257 web258 代码审计,上传username=xxxxxxpassword=xxxxxx即可获得flag 分析代码可知,这里user的值是使用反序列化user COOKIE传参的值 并且传入的值是username=xxxxxx和password=xxxxxx 利用php文件将其反序列化并进行url编码 将结果上传,并要从cookie中传入,获得flag 和上题差不

    2024年02月11日
    浏览(36)
  • 自然语言处理从入门到应用——LangChain:链(Chains)-[通用功能:链的保存(序列化)与加载(反序列化)]

    分类目录:《大模型从入门到应用》总目录 LangChain系列文章: 基础知识 快速入门 安装与环境配置 链(Chains)、代理(Agent:)和记忆(Memory) 快速开发聊天模型 模型(Models) 基础知识 大型语言模型(LLMs) 基础知识 LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(

    2024年02月11日
    浏览(43)
  • PHP反序列化入门手把手详解

    前言:文章内容大致可分为原理详解-漏洞练习- 防御方法。文章内容偏向于刚接触PHP反序列化的师傅,是一篇对PHP反序列化入门的手把手教学文章。文章特色在于对PHP反序列化原理的详细分析以及一系列由简入深的PHP反序列化习题练习和分析讲解。文章写作初衷是想借助REEBUF平

    2024年02月08日
    浏览(52)
  • ctfshow web入门 反序列化 前篇 254-266

    这里266后面主要是框架,以后在讲 反序列化入门可以参考我写的另一篇很详细的哦~php 反序列化总结 这里分析一下,我们通过get可以传参两个值,这里他会自动new一个类,我们传的参就会被送入login中做强比较,只要我们传入的值等于$username和$password的值,我们就可以获得

    2024年02月01日
    浏览(38)
  • Django REST Framework入门之序列化器

    Django REST framework (简称:DRF)是一个强大而灵活的 Web API 工具。遵循RESTFullAPI风格,功能完善。 能简化序列化及开发REST API视图的代码,大大提高REST API的开发速度;提供灵活的路由API,内置了强大的认证和授权机制 Django REST framework 最新版使用要求 在settings.py文件的INSTALLED_

    2024年01月21日
    浏览(43)
  • 读数据压缩入门笔记10_通用压缩和序列化

    1.2.3.1. 如果今天多云,那么明后两天会下雨的概率是多少? 1.2.5.1. 要使马尔可夫链算法变得实用,就必须要解决内存消耗问题与计算性能问题,即使用最佳链来编码 1.4.3.1. 在PPMZ算法中,对于符号如何去响应匹配,人们尝试了多种类型的上下文 1.4.6.1. 缺点是在进行数据压

    2024年02月16日
    浏览(36)
  • ASP.NET Core MVC 从入门到精通之序列化

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包