0626-0631韩顺平Java Buffered字节处理流 学习笔记

news2024/12/22 19:10:52

如何去构建

字节流

package com.hspedu.outputstream_;

import java.io.*;

/**
 * @author abner
 * @version 1.0
 */
public class BufferedCopy02 {
    public static void main(String[] args) {
        String srcFilePath = "D:\\Users\\Pictures\\Camera Roll\\Pierre-Auguste_Renoir,_Le_Moulin_de_la_Galette.jpg";
        String destFilePath = "D:\\hsp.jpg";

        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //因为 fis 是 ips 的子类
            bis = new BufferedInputStream(new FileInputStream(srcFilePath));
            bos = new BufferedOutputStream(new FileOutputStream(destFilePath));
            //循环读去文件,并写入到dfp
            byte[] buff = new byte[1024];
            int readLen = 0;
            //当返回-1时,文件读取完毕
            while ((readLen = bis.read(buff)) != -1){
                bos.write(buff,0,readLen);
            }
            System.out.println("文件拷贝完毕~~~");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流,关闭外层处理流,即可
            //底层会去关闭节点流
            try {
                if(bis != null){
                    bis.close();
                }
                if(bos !=null){
                    bos.close();

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


        }

    }
}

为什么需要对象流

int num = 100

int数据保存在文件中

保存在文件中, 100

float、double

保存数据的值,还保存数据类型

新的需求

(恢复过来还是dog对象,还要保存数据类型)

序列化和反序列化

称为反序列化

类信息

保存的是值和数据类型

重新恢复成了一个dog对象

涉及到数据类型的

可序列化

能够被数据化

serializable//标记接口,没有方法

接口在哪里 标题接口里面没有任何方法

externalizable 该接口有方法需要实现

保存的过程 成为序列化

Object

处理流包装流

修饰器模式

package com.hspedu.outputstream_;

import java.io.*;

/**
 * @author abner
 * @version 1.0
 * 演示 OOS的使用,完成数据的序列化
 */
public class ObjectOutStream_ {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\data.dat";
        //序列化后,保存的文件格式不是纯文本的,而是按照它的方式保存的
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        //存放数据,序列化到 e:\data.dat
        oos.write(100);//int integer(实现了序列化)
        oos.writeBoolean(true);
        //做成包装类
        oos.writeChar('a');//都是有序列化接口的
        oos.writeDouble(9.5);
        oos.writeUTF("韩顺平教育");
        //string
        //牢记类图
        //保存一个dog对象

        oos.writeObject(new Dog("旺财",10));
//

        oos.close();
        System.out.println("数据保存完毕(序列化形式)");

    }
}
//如果需要序列化某个类的对象
class Dog implements Serializable {
    private String name;
    private int age;

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

以上是存储代码,下面是逆向输出

package com.hspedu.inputstream;

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

/**
 * @author abner
 * @version 1.0
 */
public class ObjectOutStream_ {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        String filePath = "D:\\data.dat";
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
        //读取
        //顺序要保持一致
        //否则会出现异常

        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());
        System.out.println(ois.readDouble());
        System.out.println(ois.readUTF());
      //  System.out.println(ois.readObject());
        Object o = ois.readObject();
        System.out.println("运行类型="+ o.getClass());
        System.out.println("dog信息="+o);

        //这里是特别重要的细节
        //要tostring
        
        //关闭外层流
        ois.close();
        //底层转型

    }
}

631

节点流和处理流

>注意事项和细节说明

1)读写顺序要一致

2)要求实现序列化或反序列化对像,需要实现Serializable

3)序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性

4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员

5)序列化对象时,要求里面属性的类型也需要实现序列化接口

6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实

现了序列化

有序列号的时候,增加一些东西,它会认为只是添加一些内容,而不是新的对象

transient、static

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

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

相关文章

java基本数据类型变量间的运算规则

基本数据类型变量间的运算规则。 运算规则包括: 这里提到可以做运算的基本数据类型有7种,不包含boolean类型 1.自动类型提升 2.强制类型转换 自动类型提升日规则:当容量小的变量与容量大的变量做运算时,结果自动转换为容量大的数…

mvn命令

在IDEA右侧Maven菜单中,有以下几种指令。 clean:清理,清除上一次构建生产的文件。执行该命令会删除项目地址下的target文件,但不会删除本地的maven已生成的文件。 validate:验证,验证项目是否正确且所有必…

「史上最全的 TCG 规范解读」TCG 规范架构概述(下)

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强不同计算机平台上计算环境的安全性。TCG 于 2003 年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Allia…

【Linux】P4 Linux 权限 chmod chown

Linux 权限认知权限信息chmod 修改权限chown 修改用户与用户组认知权限信息 序号1:文件、文件夹权限控制信息; 权限控制信息一共有十位 第 1 位: - 表示文件,d 表示文件夹,l 表示软链接 第 2~4 位: 所属用…

JDK19下载、安装与测试的完整图文教程

一、下载JDK 1、官网获取:https://www.oracle.com/ 1.1 点击“Products”; 1.2 选择“Java”; 1.3 选择“Download Java”; 1.4 选择“Java downloads”,这里以最新版(JDK19)为例&#xff…

Python基础—文件操作(二)

Python基础—文件操作(二) CSV格式文件 逗号分隔值,以纯文本形式存储表格数据 由任意数目的记录组成,记录间以换行符分隔 每条记录由字段组成,字段间用逗号或制表符分隔 每条记录都有同样的字段序列 如有列名,位于文件第一行 每条…

【编程实践】代码之中有创意:“我一直认为工程师世界上最具创造性的工作之一”

代码之中有创意 “我一直认为工程师世界上最具创造性的工作之一”。 文章目录 代码之中有创意一、代码可以赋予创造力1.1 代码的创造力1.2 如何发挥代码的创造力二、有创意的代码可以提高工作效率2.1 代码创意可以提高工作效率2.2 如何利用代码创意来提高工作效率三、代码创意可…

【壹】嵌入式系统硬件基础

随手拍拍💁‍♂️📷 日期: 2023.2.28 地点: 杭州 介绍: 日子像旋转毒马🐎,在脑海里转不停🤯 🌲🌲🌲🌲🌲 往期回顾 🌲🌲&#x1f332…

【Java 类】001-访问修饰符、命名规范

【Java 类】001-访问修饰符、命名规范 文章目录【Java 类】001-访问修饰符、命名规范一、访问修饰符概述1、是什么2、作用作用问题3、访问修饰符有哪些4、作用对象二、访问修饰符使用演示1、类访问修饰符演示第一步:创建 Dog 类:public第二步&#xff1a…

画图说透 ZooKeeper如何保证数据一致性:选举和ZAB协议

1、zookeeper是什么? zookeeper能被各个牛逼的中间件项目中所依赖,已经说明了他的地位。一出手就是稳定的杀招。zookeeper是什么?官网中所说,zookeeper致力于开发和维护成为一个高度可靠的分布式协调器。 开局一张图,…

STM32MP157-Linux音频应用编程-简易语音助手

文章目录前言STM32MP157简易语音助手alsa-lib简介:移植alsa-lib库:libcurl库简介:移植libcurl库:API调用修改asrmain.c文件修改token.c文件录音文件IO打开音频文件硬件控制sysfs文件系统数据解析和控制多线程主循环实现效果及注意…

Hive与HBase的区别及应用场景

当数据量达到一定量级的时候,存储和统计计算查询都会遇到问题,今天了解一下Hive和Hbase的区别和应用场景。 一、定义 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能&am…

Umi使用百度地图服务

需求描述 需要在前端页面中使用地图定位功能,所以在前端umi项目中使用百度地图服务,由于umi项目默认没有入口的html文件,所以无法通过常规的在head中加入外链js的方式使用 百度ak zyqeLCzvQPCCNImRu9yRGOqWlEUicxxGreact使用百度api 链接:…

【Mybatis系列】Mybatis常见的分页方法以及源码理解

Mybatis-Plus的selectPage 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency>添加分页插件 Configuration public class My…

ifm3dlib+Python实现摄像头点云数据保存

0. 起因&需求 现有一款摄像头 O3D303&#xff0c;通过网线将其连接到局域网后&#xff0c;同一局域网的电脑可以通过可视化软件查看到各项参数以及对应的点云图。 但是如果想定制化具体的需求&#xff0c;用官方的可视化软件无疑是不可取的。这时候就需要用到SDK&#xf…

【Java】JVM

一、介绍 1.什么是JVM? JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的机器&#xff0c;是通过在实际的计算机上仿真模拟各种功能实现的。JVM包含一套字节码指令集&#xff0c;一组寄存器&#xff0c;一个栈&#xff0c;一个垃圾回收堆和一个存储方法域。JVM屏…

面向对象设计模式:创建型模式之抽象工厂模式

一、抽象工厂模式&#xff0c;Abstract Factory Pattern 1.1 Definition 定义 抽象工厂模式是围绕一个抽象工厂&#xff08;其他工厂的工厂&#xff09;创建其他工厂的创建型模式。 1.2 Intent 意图 Provide an interface for creating families of related or dependent o…

【AutoSAR】【MCAL】Dio

一、结构 二、功能介绍 DIO&#xff08;数字输入输出&#xff09;驱动模块主要是对端口&#xff08;Port&#xff09;&#xff0c;通道&#xff08;Channel&#xff09;和通道组&#xff08;ChannelGroup&#xff09;进行读写操作。 通道&#xff08;Channel&#xff09;&…

Tomcat服务器配置以及问题解决方案

文章目录01 Tomcat简介02 Tomcat的安装03 Tomcat的使用启动Tomcat服务器 &#xff08;解决一闪而过&#xff09;测试 Tomcat 是否启动Tomcat 服务器的关闭04 Tomcat的配置配置端口控制台配置&#xff08;乱码解决&#xff09;部署工程到Tomcat中01 Tomcat简介 Tomcat是一款开源…

Android Compose——一个简单的Bilibili APP

Bilibili移动端APP简介依赖效果登录效果WebView自定义TobRow的Indicator大小首页推荐LazyGridView使用Paging3热门排行榜搜索模糊搜索富文本搜索结果视频详情合集信息Coroutines进行网络请求管理&#xff0c;避免回调地狱添加suspendwithContextGit项目链接末简介 此Demo采用A…