java学习笔记(序列化初步+数据流+处理流的个人理解)
2022/2/10 11:42:34
本文主要是介绍java学习笔记(序列化初步+数据流+处理流的个人理解),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
序列化的本质其实就是。
将某样东西封装为对象之后,利用序列化转化为二进制文件,再利用字节输出流储存在硬盘中。而反序列化则是把二进制文件在嵌套了输入流的序列化处理下,重新变回原来的样子
这个图片代表我对序列化的理解,同时也是我对于大多数处理流和嵌套的理解
序列化的代码如下
package com.Ioliu; import java.io.*; public class Text_obStream { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectOutputStream os1=new ObjectOutputStream(new FileOutputStream("D:\\duo.txt")); os1.writeObject("asd"); //此刻变为二进制文件,存在于硬盘之中 ObjectInputStream os2=new ObjectInputStream(new FileInputStream("D:\\duo.txt")); System.out.println(os2.readObject()); //再用对象流进行读取,最终得到的还是这个封装成对象的东西; os2.close(); os1.close(); } }
这里有一点需要注意的是,上面进行序列化的时候,序列化的是一个字符串 字符串这个类本身已经实现了Serializable接口,所以可以正常使用 如果自定义的类没有实现这个接口,序列化时就会出现这种报错 只要实现了就没事情了,详见下方
package com.Ioliu; import java.io.*; public class Io_Stream { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectOutputStream a1=new ObjectOutputStream(new FileOutputStream("D:\\dio.txt")); //ut是一个类 ut ass=new ut(14122); //如果不插入Serializable接口的话,下面这个写入都会出问题; a1.writeObject(ass); a1.close(); ObjectInputStream a2=new ObjectInputStream(new FileInputStream("D:\\dio.txt")); ut as=(ut)a2.readObject(); System.out.println(as.name); a2.close(); } } class ut implements Serializable{ int name; public ut(int name) { this.name = name; } }
关于数据流
数据流的作用是将基本数据类型和字符串转化为乱码,或者将对应的乱码{有序}地转化为数据类型和字符串。也同样是一种处理流
基本原理也可以用上面序列化和反序列化的图片来理解
import java.io.*; public class Text_data { public static void main(String[] args) throws IOException { //数据输入输出流本质上还是处理流,嵌套的是字节流,用来处理基本数据类型和字符串 //这里接受的直接就是字节流 //DataInputStream di=new DataInputStream(new FileInputStream("")); //输出流的嵌套在下面 /*File a=new File("D:\\duo.txt"); FileOutputStream ot=new FileOutputStream(a);*/ //合在一起写也没什么太大问题啦 DataOutputStream dt=new DataOutputStream(new FileOutputStream("D:\\duo.txt",true)); //若想不覆盖,再文件对象并列的地方明确指出true/false //这里就没写输入流,直接连接好文件输出流,再嵌套上一个数据输出流 dt.writeUTF("22222"); dt.close(); //di.close(); } }
package com.Ioliu; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; //上一个程序已经利用文件数据输入流 //但是文件里的东西人类是看不懂的 //只能用数据输入流进行逆向识别 public class text_data2 { public static void main(String[] args) throws IOException { //之前那段代码已经把数据全都塞入dou文件里了,这里重新连接上一个数据输入流 DataInputStream da=new DataInputStream(new FileInputStream("D:\\duo.txt")); //再进行文件内容读取 //读取到的东西用变量储存在程序内存中 String sc=da.readUTF(); String sd=da.readUTF(); da.close(); //接下来直接输出变量即可 System.out.println(sc); System.out.println(sd); } } //管道要链接到什么位置一定要明确(有一端是默认连接到程序) //输入时按什么顺序输入的,输出的时候就要安神莫顺序输出 //读取的时候好像自带分隔,也是和输入的时候一样是匹配的次数 //算是紧密结构吗?????
这篇关于java学习笔记(序列化初步+数据流+处理流的个人理解)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!
- 2024-05-082024年,行业变动下的程序员应该首先学习哪种编程语言?
- 2024-05-08我在下载模块的时候下不下来出现这种情况是什么意思?
- 2024-05-08最近很火的低代码到底是什么?
- 2024-05-08设计模式Java实现-建造者模式
- 2024-05-08设计模式Java实现-原型模式
- 2024-05-08记一次java进程频繁挂掉问题排查修复
- 2024-05-08test
- 2024-05-0802-大厂电商设计解析之商品管理系统
- 2024-05-08迭代的难题:敏捷团队每次都有未完成的工作,如何破解?