首页 > 其他分享 >IO流:数据流、序列化流、IO框架

IO流:数据流、序列化流、IO框架

时间:2024-08-31 21:52:53浏览次数:8  
标签:String io IO 数据流 new 序列化 public out

数据流

DataInputStream(字节输入流的实现类)、DataOutputStream(字节输出流的实现类),下面例子先看输出,再看输入,因为输入和输出的类型顺序要一致。

DataInputStream

读取数据输出流写出去的数据、

IO流:数据流、序列化流、IO框架_输出流

public class DataInputStreamTest2 {
    public static void main(String[] args) {
        try (DataInputStream dis = new DataInputStream(new FileInputStream("io-app2/src/a10.txt"))) {

            int i = dis.readInt();
            System.out.println(i);

            double d = dis.readDouble();
            System.out.println(d);

            boolean b = dis.readBoolean();
            System.out.println(b);

            String rs = dis.readUTF();
            System.out.println(rs);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

DataOutputStream

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

IO流:数据流、序列化流、IO框架_输出流_02

public class DataOutputStreamTest1 {
    public static void main(String[] args) {
        try {
            // 1. 创建一个数据输出流包裹低级的字节输出流
            DataOutputStream dos = 
                new DataOutputStream(new FileOutputStream("io-app2/src/itheima10out.txt"));
            
            dos.writeInt(97);
            dos.writeDouble(99.5);
            dos.writeBoolean(true);
            dos.writeUTF("程序员");
            
            dos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

序列化流

对象序列化:把java对象写进到文件。

对象反序列化:把文件中的Java对象读出来。

IO流:数据流、序列化流、IO框架_序列化_03

ObjectOutputStream(对象字节输出流)

把Java对象序列化:把java对象写进到文件。

IO流:数据流、序列化流、IO框架_序列化_04

如果对象需要序列化,则需要实现Serializable接口
//transient关键字修饰的变量不会被序列化

构造器

import java.io.Serializable;
//如果对象需要序列化,则需要实现Serializable接口
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private String loginName;
    private String userName;
    private int age;
    //transient关键字修饰的变量不会被序列化
    private transient String passWord;


    public User() {
    }

    public User(String loginName, String userName, int age, String passWord) {
        this.loginName = loginName;
        this.userName = userName;
        this.age = age;
        this.passWord = passWord;
    }
public class Test10ObjectOutputStream {
    public static void main(String[] args) {
        try {
            // 2. 创建一个对象字节输出流包装原始的字节输出流。
            ObjectOutputStream oos =
                new ObjectOutputStream(new FileOutputStream("io-app2/src/a11out.txt"));
            
            // 1. 创建一个Java对象。
            User u = new User("admin", "张三", 32, "666888xyz");
            
            // 3. 序列化对象到文件中
            oos.writeObject(u);
            System.out.println("序列化对象成功!!!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ObjectInputputStream(对象字节输入流)

反序列化:把文件中的Java对象读出来。

IO流:数据流、序列化流、IO框架_序列化_05

public class Test20ObjectInputStream {
    public static void main(String[] args) {
        try {
            // 1. 创建一个对象字节输入流管道,包装低级的字节输入流与源文件接口
            ObjectInputStream ois = 
                new ObjectInputStream(new FileInputStream("io-app2/src/a11out.txt"));
            
            User u = (User) ois.readObject();
            System.out.println(u);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果要一次序列化多个对象,可以使用ArrayList集合存储多个对象,然后对集合进行序列化。ArrayList集合已经实现了序列化接口。

class MyObject implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;

    public MyObject(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyObject{name='" + name + "'}";
    }
}

public class SerializeExample {
    public static void main(String[] args) {
        ArrayList<MyObject> myObjectList = new ArrayList<>();
        myObjectList.add(new MyObject("Object1"));
        myObjectList.add(new MyObject("Object2"));
        myObjectList.add(new MyObject("Object3"));

        try (FileOutputStream fileOut = new FileOutputStream("objects.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {

            out.writeObject(myObjectList);
            System.out.println("Serialization successful");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

IO框架

框架:

为了解决某类问题,编写的一套类、接口等,相当于一个半成品,大多数框架都是第三方研发的。

优点:

在框架基础上开发,可以得到优秀的软件架构,提高开发效率。

格式:

一般把类、接口等编译成class形式,再压缩成.jar结尾的文件发行出去。

IO框架:

封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式对文件进行操作,对数据进行读写。

Commons-io

apache的一个io小框架。

IO流:数据流、序列化流、IO框架_序列化_06

IO流:数据流、序列化流、IO框架_输出流_07

搜索Commons-io进入官网下载jar包,在项目中整合即可使用。

IO流:数据流、序列化流、IO框架_序列化_08

因为这样搞得Java很没面子,所以后续它也提供了一些代码以供使用。

//java 提供的原生一行代码
Files.copy(Path.of("io-app2\\src\\itheima01.txt"), Path.of("io-app2\\src\\b.txt"));

System.out.println(Files.readString(Path.of("io-app2\\src\\a01.txt")));

标签:String,io,IO,数据流,new,序列化,public,out
From: https://blog.51cto.com/u_16382144/11884285

相关文章

  • IoC&AOP详解
    1.IoC1.1什么是IoC    IoC即控制反转/反转控制。它是一种思想而不是一种技术实现,描述的是:Java开发领域对象的创建以及管理的问题    例如:现有类A依赖类B        传统开发方式:在类A中通过new关键字来创建一个类B的对象      ......
  • IO流:转换流、打印流
    转换流解决不同编码时会出现乱码的问题。代码的编码方式和被读文件的编码方式不对应。字符输入转换流InputStreamReaderpublicclassInputStreamReaderTest2{publicstaticvoidmain(String[]args){try{//1.得到文件的原始字节流(GBK的字节流形......
  • Stable Diffusion 小白的入坑铺垫
    小白的StableDiffusion入坑铺垫本文主要讲述一些StableDiffusion入坑前需要了解的一些相关概念,不会涉及很高深的理论知识,因为我也讲不明白。本文所讲的内容基本上小学生就能看懂。如果你完全没听说过StableDiffusion也没关系,只要你听说过AI绘画,并且对此有兴趣,就能跟着......
  • day10(IO进程)进程间的通信---共享内存
    目录1.特点2.步骤3.函数接口4.命令1.特点1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。2)为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读......
  • IO 模型
    I/O基本概念I/O即数据的读取(接收)或写入(发送)操作通常用户进程中的一个完整I/O分为两个阶段用户进程空间<-->内核空间内核空间<-->设备空间(磁盘、网卡等)分类:内存I/O、网络I/O和磁盘I/O三种同步和异步:对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最......
  • spark的SparkSubmit类关于Configuration的资源文件加载
    在阅读 SparkSubmit 源代码时,重点关注 Configuration 的资源文件的加载情况,默认通过 newConfiguration() 构造方法创建时,只会加载 core-default.xml 和core-site.xml文件,但是 SparkSubmit 中打印 Configuration 时,发现还会加载 yarn-site.xml,SparkSubmit 代码中没有......
  • io重定向
    标准I/O流每个进程(包括命令)在运行时都有三个标准的I/O流:标准输入(StandardInput,stdin):默认从键盘获取输入。文件描述符为0标准输出(StandardOutput,stdout):默认输出到屏幕。文件描述符为1标准错误(StandardError,stderr):默认输出错误信息到屏幕。文件描述符为2索引对应文......
  • Goolge earth studio 进阶4——路径修改与平滑
    如果我们希望在大约中途时获得更多的城市鸟瞰视角。可以将相机拖动到这里并创建一个新的关键帧。camera_target_clip_7EarthStudio会自动平滑我们的路径,所以当我们通过这个关键帧时,不是一个生硬的角度,而是一个平滑的曲线。camera_target_clip_8路径上有贝塞尔控制......
  • MotionPlus 安装指南
    介绍MotionPlus是一款用于监控摄像头的视频信号,并检测运动的应用程序,是对原有Motion软件的升级版本。它支持多种设备,如网络摄像头、V4L2网络摄像头和视频采集卡等。MotionPlus提供多种功能,包括录制视频、保存图片、实时视频流观看、调用脚本、日志记录、以及运动检测等功能。安......
  • IO流:缓冲流
    字节缓冲流简介缓冲流是对原原始流进行包装,提高原始流读写数据的性能。提供8KB输入输出缓冲区。 用法publicclassBufferedInputStreamTest1{publicstaticvoidmain(String[]args){try{//1.定义一个字节缓冲输入流包裹原始的字节输入流......