当前位置: 首页 > news >正文

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

如何去构建

字节流

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));//循环读去文件,并写入到dfpbyte[] 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.datoos.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.lryc.cn/news/30432.html

相关文章:

  • 【网络】序列化和反序列化
  • 【代码随想录训练营】【Day32】第八章|贪心算法|122.买卖股票的最佳时机II |55. 跳跃游戏|45.跳跃游戏II
  • constexpr 和 常量表达式
  • Vue响应式原理————Object.defineProperty()和proxy的用法分享
  • CSDN 编程竞赛三十四期题解
  • C#教程06 运算符
  • 软测入门(六)pytest单元测试
  • 经典分类模型回顾5—DenseNet实现图像分类(matlab)
  • 基于flask+bootstrap+echarts+mysql的鱼村小馆订餐后台管理系统
  • Spark使用Log4j将日志发送到Kafka
  • c++类与对象整理(上)
  • Docker学习(十九)什么是镜像的元数据?
  • Python如何获取弹幕?给你介绍两种方式
  • JAVA- AOP 面向切面编程 Aspect切面工具类 记录特定方法执行时的入参、执行时间、返参等内容
  • 「史上最全的 TCG 规范解读」TCG 规范架构概述(下)
  • GDScript 导出变量 (4.0)
  • JAVA知识点全面总结6:泛型反射和注解
  • 死代码删除(DCE,Dead Code Elimination)和激进的死代码删除(ADCE,Aggressive DCE)
  • 询问new bing关于android开发的15个问题(前景、未来、发展方向)
  • 【C++】初识类和对象
  • EPICS S7nodave手册
  • 2023最新版本RabbitMQ的持久化和简单使用
  • 函数式编程
  • 【Java 类】001-访问修饰符、命名规范
  • 【C++】命名空间
  • 【AutoSAR】【MCAL】Dio
  • 瑞吉外卖——day2
  • 了解java
  • 【编程实践】代码之中有创意:“我一直认为工程师世界上最具创造性的工作之一”
  • 【MySQL】表连接