- 浏览: 118134 次
- 性别:
- 来自: 深圳
文章分类
最新评论
1.序列化:把内存中正在运行的对象写到输出流中
反序列化:从输入流中读取对象
2.需要被序列化操作的类必须实现:java.io.Serializable接口
3.通过transient关键字限制对属性的序列化
private transient String passWord;
4.重写readObject()和writeObject()来控制序列化方式
调用defaultReadObject()和defaultWriteObject()执行默认序列化操作
5.序列化前加密属性
示例:
//加密属性
private byte[] change(byte[] buff){
for(int i=0;i<buff.length;i++){
int b = 0;
for(int j=0;j<8;j++){
int bit = (buff[i]>>j & 1)==0? 1 : 0;
b+=(1<<j)*bit;
}
buff[i]=(byte)b;
}
return buff;
}
private void writeObject(ObjectOutputStream o)throw IOException{
o.defaultWriteObject();//按默认方式序列化
o.writeObject(change(passWord.getByte()));
}
private void readObject(ObjectOutputStream o)throw IOException{
o.defaultReadObject();//按默认方式反序列化
byte[] buff = (byte[])o.readObject();
passWord = new String(change(buff));
}
-------------------------------------------------------
public static void getSerializable() throws IOException,
ClassNotFoundException {
// 序列化
FileOutputStream fs = new FileOutputStream("D:\\a.serializable");
ObjectOutputStream ops = new ObjectOutputStream(fs);
String a = "Object-str";
Date date = new Date();
ops.writeObject(a);
ops.writeObject(date);
ops.close();
// 反序列化
FileInputStream fss = new FileInputStream("D:\\a.serializable");
ObjectInputStream is = new ObjectInputStream(fss);
String as = (String) is.readObject();
Date dates = (Date) is.readObject();
System.out.println(as);
System.out.println(dates);
}
public static void getInputStream() throws IOException {
// 输入流
InputStream is = new FileInputStream("D:\\in.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String data;
while ((data = br.readLine()) != null) {
System.out.println(data);
}
br.close();
// 输出流
OutputStream os = new FileOutputStream("D:\\out.txt");
OutputStreamWriter oss = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(oss);
pw.println(data);
pw.close();
}
--------------------------------------------------------------
注册登录示例
public static boolean insertUser(UserInfo userInfo) throws IOException
{
boolean osBoolean = false;
if (userInfo == null || userInfo.getUserName().isEmpty()
|| userInfo.getPassWord().isEmpty())
{
return osBoolean;
}
OutputStream os = new FileOutputStream("F:\\userInfo.xbliuc");
ObjectOutputStream oos = new ObjectOutputStream(os);
List<Map<String, String>> listUsers = new ArrayList<Map<String, String>>();
Map<String, String> maps = new HashMap<String, String>();
maps.put(userInfo.getUserName(), userInfo.getPassWord());
listUsers.add(maps);
if (listUsers.size() > 0)
{
oos.writeObject(listUsers);
osBoolean = true;
}
oos.close();
return osBoolean;
}
public static boolean enterUser(UserInfo userInfo) throws IOException,
ClassNotFoundException
{
boolean isBoolean = false;
if (userInfo == null || userInfo.getUserName().isEmpty()
|| userInfo.getPassWord().isEmpty())
{
return isBoolean;
}
InputStream is = new FileInputStream("F:\\userInfo.xbliuc");
ObjectInputStream ois = new ObjectInputStream(is);
List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
lists = (List<Map<String, String>>)ois.readObject();
if (lists.size() > 0)
{
Map<String, String> maps = lists.get(0);
if (userInfo.getPassWord().equals(maps.get(userInfo.getUserName())))
{
isBoolean = true;
}
}
is.close();
return isBoolean;
}
public static void Test() throws IOException, ClassNotFoundException
{
System.out.print(":");
BufferedReader bra = new BufferedReader(
new InputStreamReader(System.in));
String a = bra.readLine();
int b = Integer.parseInt(a);
System.out.print(": ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String userName = br.readLine();
System.out.print(":");
BufferedReader br2 = new BufferedReader(
new InputStreamReader(System.in));
String passWord = br2.readLine();
UserInfo userInfo = new UserInfo(userName, passWord);
insertUser(userInfo);
enterUser(userInfo);
}
-----------------------------
/*******************************************************************************
* Copyright(c) 2005-2009 Huawei Tech. Co., Ltd.
* All rights reserved.
*
* Author: xbliuc
* Date : 2010-12-19
*******************************************************************************/
package com.rt.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Date;
/**
* File InputStream
*/
public class InputStreamTest
{
/**
* TODO 添加方法注释
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException,
ClassNotFoundException
{
//getFileText();//字节输入流
//getStringBufferStream();//字符输入流
//copyFile();
//copy();
getSerializable();
}
/**
* 对象序列化和反序列化
* @throws IOException
* @throws ClassNotFoundException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void getSerializable() throws IOException,
ClassNotFoundException
{
//创建保存序列化对象的文件
ObjectOutputStream oOutput = new ObjectOutputStream(
new FileOutputStream("D:\\ObjectFile.obj"));
String oStr = "Object";
Date odata = new Date();
oOutput.writeObject(oStr);
oOutput.writeObject(odata);
oOutput.close();
//反序列对象
ObjectInputStream oInput = new ObjectInputStream(new FileInputStream(
"D:\\ObjectFile.obj"));
String str = (String)oInput.readObject();
System.out.println("String : " + str);
Date date = (Date)oInput.readObject();
System.out.println("Date : " + date);
}
//把键盘输入的数据输出到控制台
public static void copy() throws IOException
{
InputStreamReader a = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(a);
String data;
while ((data = br.readLine()) != null && data.length() != 0)
{
System.out.println(data);
System.err.println(data);
}
}
/**
* 输入流种类
* InputStream :字节输入流
* OutputStream : 字节输出流
* ByteArrayInputStream:字节数组输入流
* FileInputStream : 文件输入流
* StringBufferInputStream : 字符串输入流(StringReader)
* SequenceInputStream : 顺序输入流
* FilterInputStream : 过滤输入流
* @throws IOException
*/
public static void getFileText() throws IOException
{
final int SIZE = 1024;
FileInputStream fs = null;
FileOutputStream os = null;
try
{
fs = new FileInputStream("D:\\a.txt");//输出字节流
os = new FileOutputStream("D:\\b.txt");//输入字节流
byte[] bytes = new byte[SIZE];//创建字节缓冲区
int len = fs.read(bytes);//把a.txt文件中的数据读到bytes中
while (len != -1)
{
os.write(bytes, 0, len);//把bytes中的数据写到b.txt中
len = fs.read(bytes);//此时缓冲区bytes数组为空
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
fs.close();
os.close();
}
}
/**
* 字符串输入流示例
* TODO 添加方法注释
* @throws IOException
*/
public static void getStringBufferStream() throws IOException
{
final String FORMAT = "GBK";
InputStream input = new FileInputStream("D:\\aa.txt");
InputStreamReader reader = new InputStreamReader(input);
BufferedReader br = new BufferedReader(reader, 1024);
String data = "";
while ((data = br.readLine()) != null)
{
System.out.println(data);
}
br.close();
}
public static void copyFile() throws IOException
{
//编码格式,不添加此参数则按照本地平台的编码读取输入流中的字符
final String FORMAT = "GBK";//UTF-8,
//文件输入流
InputStream in = new FileInputStream("D:\\aa.txt");
//字符输入流
InputStreamReader reader = new InputStreamReader(in, FORMAT);
//带有缓冲区的字符输入流,提高文件读的效率
BufferedReader br = new BufferedReader(reader);
//文件输出流
OutputStream output = new FileOutputStream("D:\\bb.txt");
//字符输出流
OutputStreamWriter write = new OutputStreamWriter(output, FORMAT);
BufferedWriter bw = new BufferedWriter(write);
//输入格式化数据
PrintWriter pw = new PrintWriter(bw, true);
String data;
while ((data = br.readLine()) != null)
{
pw.println(data);//向目标逐行写数据
}
br.close();
pw.close();
}
}
反序列化:从输入流中读取对象
2.需要被序列化操作的类必须实现:java.io.Serializable接口
3.通过transient关键字限制对属性的序列化
private transient String passWord;
4.重写readObject()和writeObject()来控制序列化方式
调用defaultReadObject()和defaultWriteObject()执行默认序列化操作
5.序列化前加密属性
示例:
//加密属性
private byte[] change(byte[] buff){
for(int i=0;i<buff.length;i++){
int b = 0;
for(int j=0;j<8;j++){
int bit = (buff[i]>>j & 1)==0? 1 : 0;
b+=(1<<j)*bit;
}
buff[i]=(byte)b;
}
return buff;
}
private void writeObject(ObjectOutputStream o)throw IOException{
o.defaultWriteObject();//按默认方式序列化
o.writeObject(change(passWord.getByte()));
}
private void readObject(ObjectOutputStream o)throw IOException{
o.defaultReadObject();//按默认方式反序列化
byte[] buff = (byte[])o.readObject();
passWord = new String(change(buff));
}
-------------------------------------------------------
public static void getSerializable() throws IOException,
ClassNotFoundException {
// 序列化
FileOutputStream fs = new FileOutputStream("D:\\a.serializable");
ObjectOutputStream ops = new ObjectOutputStream(fs);
String a = "Object-str";
Date date = new Date();
ops.writeObject(a);
ops.writeObject(date);
ops.close();
// 反序列化
FileInputStream fss = new FileInputStream("D:\\a.serializable");
ObjectInputStream is = new ObjectInputStream(fss);
String as = (String) is.readObject();
Date dates = (Date) is.readObject();
System.out.println(as);
System.out.println(dates);
}
public static void getInputStream() throws IOException {
// 输入流
InputStream is = new FileInputStream("D:\\in.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String data;
while ((data = br.readLine()) != null) {
System.out.println(data);
}
br.close();
// 输出流
OutputStream os = new FileOutputStream("D:\\out.txt");
OutputStreamWriter oss = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(oss);
pw.println(data);
pw.close();
}
--------------------------------------------------------------
注册登录示例
public static boolean insertUser(UserInfo userInfo) throws IOException
{
boolean osBoolean = false;
if (userInfo == null || userInfo.getUserName().isEmpty()
|| userInfo.getPassWord().isEmpty())
{
return osBoolean;
}
OutputStream os = new FileOutputStream("F:\\userInfo.xbliuc");
ObjectOutputStream oos = new ObjectOutputStream(os);
List<Map<String, String>> listUsers = new ArrayList<Map<String, String>>();
Map<String, String> maps = new HashMap<String, String>();
maps.put(userInfo.getUserName(), userInfo.getPassWord());
listUsers.add(maps);
if (listUsers.size() > 0)
{
oos.writeObject(listUsers);
osBoolean = true;
}
oos.close();
return osBoolean;
}
public static boolean enterUser(UserInfo userInfo) throws IOException,
ClassNotFoundException
{
boolean isBoolean = false;
if (userInfo == null || userInfo.getUserName().isEmpty()
|| userInfo.getPassWord().isEmpty())
{
return isBoolean;
}
InputStream is = new FileInputStream("F:\\userInfo.xbliuc");
ObjectInputStream ois = new ObjectInputStream(is);
List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
lists = (List<Map<String, String>>)ois.readObject();
if (lists.size() > 0)
{
Map<String, String> maps = lists.get(0);
if (userInfo.getPassWord().equals(maps.get(userInfo.getUserName())))
{
isBoolean = true;
}
}
is.close();
return isBoolean;
}
public static void Test() throws IOException, ClassNotFoundException
{
System.out.print(":");
BufferedReader bra = new BufferedReader(
new InputStreamReader(System.in));
String a = bra.readLine();
int b = Integer.parseInt(a);
System.out.print(": ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String userName = br.readLine();
System.out.print(":");
BufferedReader br2 = new BufferedReader(
new InputStreamReader(System.in));
String passWord = br2.readLine();
UserInfo userInfo = new UserInfo(userName, passWord);
insertUser(userInfo);
enterUser(userInfo);
}
-----------------------------
/*******************************************************************************
* Copyright(c) 2005-2009 Huawei Tech. Co., Ltd.
* All rights reserved.
*
* Author: xbliuc
* Date : 2010-12-19
*******************************************************************************/
package com.rt.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Date;
/**
* File InputStream
*/
public class InputStreamTest
{
/**
* TODO 添加方法注释
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException,
ClassNotFoundException
{
//getFileText();//字节输入流
//getStringBufferStream();//字符输入流
//copyFile();
//copy();
getSerializable();
}
/**
* 对象序列化和反序列化
* @throws IOException
* @throws ClassNotFoundException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void getSerializable() throws IOException,
ClassNotFoundException
{
//创建保存序列化对象的文件
ObjectOutputStream oOutput = new ObjectOutputStream(
new FileOutputStream("D:\\ObjectFile.obj"));
String oStr = "Object";
Date odata = new Date();
oOutput.writeObject(oStr);
oOutput.writeObject(odata);
oOutput.close();
//反序列对象
ObjectInputStream oInput = new ObjectInputStream(new FileInputStream(
"D:\\ObjectFile.obj"));
String str = (String)oInput.readObject();
System.out.println("String : " + str);
Date date = (Date)oInput.readObject();
System.out.println("Date : " + date);
}
//把键盘输入的数据输出到控制台
public static void copy() throws IOException
{
InputStreamReader a = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(a);
String data;
while ((data = br.readLine()) != null && data.length() != 0)
{
System.out.println(data);
System.err.println(data);
}
}
/**
* 输入流种类
* InputStream :字节输入流
* OutputStream : 字节输出流
* ByteArrayInputStream:字节数组输入流
* FileInputStream : 文件输入流
* StringBufferInputStream : 字符串输入流(StringReader)
* SequenceInputStream : 顺序输入流
* FilterInputStream : 过滤输入流
* @throws IOException
*/
public static void getFileText() throws IOException
{
final int SIZE = 1024;
FileInputStream fs = null;
FileOutputStream os = null;
try
{
fs = new FileInputStream("D:\\a.txt");//输出字节流
os = new FileOutputStream("D:\\b.txt");//输入字节流
byte[] bytes = new byte[SIZE];//创建字节缓冲区
int len = fs.read(bytes);//把a.txt文件中的数据读到bytes中
while (len != -1)
{
os.write(bytes, 0, len);//把bytes中的数据写到b.txt中
len = fs.read(bytes);//此时缓冲区bytes数组为空
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
fs.close();
os.close();
}
}
/**
* 字符串输入流示例
* TODO 添加方法注释
* @throws IOException
*/
public static void getStringBufferStream() throws IOException
{
final String FORMAT = "GBK";
InputStream input = new FileInputStream("D:\\aa.txt");
InputStreamReader reader = new InputStreamReader(input);
BufferedReader br = new BufferedReader(reader, 1024);
String data = "";
while ((data = br.readLine()) != null)
{
System.out.println(data);
}
br.close();
}
public static void copyFile() throws IOException
{
//编码格式,不添加此参数则按照本地平台的编码读取输入流中的字符
final String FORMAT = "GBK";//UTF-8,
//文件输入流
InputStream in = new FileInputStream("D:\\aa.txt");
//字符输入流
InputStreamReader reader = new InputStreamReader(in, FORMAT);
//带有缓冲区的字符输入流,提高文件读的效率
BufferedReader br = new BufferedReader(reader);
//文件输出流
OutputStream output = new FileOutputStream("D:\\bb.txt");
//字符输出流
OutputStreamWriter write = new OutputStreamWriter(output, FORMAT);
BufferedWriter bw = new BufferedWriter(write);
//输入格式化数据
PrintWriter pw = new PrintWriter(bw, true);
String data;
while ((data = br.readLine()) != null)
{
pw.println(data);//向目标逐行写数据
}
br.close();
pw.close();
}
}
发表评论
文章已被作者锁定,不允许评论。
-
美邦智能
2013-03-30 14:35 0员工管理(工资,假期,) 客户管理 供应商管理 采购模块 ... -
加密解密
2011-12-03 14:59 872String a = "ABCc"; ... -
例_实_建_创_口_接_过_通
2011-08-17 09:50 510public interface IJieKou { ... -
BASE64编码
2011-08-12 16:59 628将对ABC进行BASE64编码: // 1、首先取ABC对 ... -
流_件_文_java
2011-07-20 14:10 667读取 File file = new File(" ... -
作_操_合_集
2011-07-05 15:09 740//Collections List<String> ... -
BigDecimal
2011-07-02 18:42 894double num1 = 2.36; double num2 ... -
件_文_Properties
2011-06-29 19:26 656Properties properties = new Pro ... -
Eclipse平台BPEL开发
2011-06-25 00:15 736Eclipse平台BPEL开发 -
件_文_缩_压
2011-04-11 19:46 654/****************************** ... -
素_元_组_数_除_删_加_增
2011-04-11 19:44 597private static void delIndexEle ... -
作_操_件_文_Java
2011-04-06 20:39 690/****************************** ... -
式_格_字_数
2011-04-06 20:36 670System.out.println(&quo ... -
用_引_软
2011-04-06 20:28 722/****************************** ... -
过_程_载_加_类
2011-04-06 20:27 6321.编写源代码 2.jdk变异成.class文件 3.类加 ... -
序_排_速_快_现_实_JAVA
2011-02-11 17:21 727JAVA实现一个快速排序? 排序的方法有:插入排序(直接插入排 ... -
器_时_定_java
2011-02-11 17:06 590public class aaa { //java定时执行 ... -
举_枚
2011-01-20 12:22 7581.枚举其实都是隐式的继承自java.lang.Enum。有类 ... -
类_e_l_i_F
2011-01-13 23:17 6111.File类提供了管理文件和目录的方法 delete() ... -
制_机_理_处_常_异
2011-01-13 22:29 7301.异常处理:如何表现异常情况?如何控制处理异常流程? 2. ...
相关推荐
`pickle`模块是Python标准库中的一个重要组成部分,主要用于实现Python对象的序列化和反序列化操作。序列化是指将对象的状态信息转换为可以存储或传输的形式的过程;而反序列化则是指将序列化后的数据恢复成对象的...
OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...
OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...
OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...
OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...
可以将要转换的数重复除以基数,然后讲除的余数按反方向排列来实现; 8、 已知A[n]为正数数组,试写出实现下列运算的递归算法; a. 求数组A中的最大整数; b. 求n个数的平均值; c. 求n个整数的平均值;...
OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...
基 于 Unity 的 Protobuf 数 据 处 理 序 列 化 和 反 序 列 化 测 试 还 有 和 json 数 据 处 理 的 对 比
译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以...
含文件掩码和以反斜线结尾,即使指定了 -r 开关,目录和子目录的所 有内容都会被添加到压缩文件中。 下面的命令会把 Bitmaps 目录和它的子目录中的所有文件添加到 RAR 压缩文件 Pictures.rar 中: rar a ...
思考题涉及相序错误、电压互感器极性反接的影响,准同期与自同期并列的差异,以及合闸冲击电流的相关因素,旨在深化对电力系统并列操作的理解。 在实际操作中,必须遵循安全规定,如合闸时机的选择、按键的有效时间...
速度:序列化和反序列化数据在单个CPU内核上的持续速率可以超过1GB / s。 安全:它可以用于不受信任且可能是恶意数据,例如从Internet接收到的序列化数据包或文件。 可移植性:序列化格式是可移植的。 它独立于...
译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 ...
知识点:OWASP Top10 漏洞包括 SQL 注入、失效的身份认证、敏感数据泄露、XML 外部实体(XXE)、失效的访问控制、安全配置错误、跨站脚本(XSS)、不安全的反序列化、使用含有已知漏洞的组件、不足的日志记录和监控...
译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以...
每个脉冲使电机转过一个固定的角度,通过控制脉冲的数量、频率和相序,可以精确地控制电机的转动角度、速度和方向。 3. **步进电机控制**:控制步进电机的基本方法包括正反转、加减速和启停。正反转通过改变脉冲的...
一旦按键按下,则启动步进电机,通过循环查表法按照预定的相序表进行电机的正反转控制。为了实现快速和慢速移动,程序中采用了不同的延时策略。 #### 键盘管理应用 **例4:8255A对非编码键盘的管理:** **硬件...
文章提到的关键词包括层次分析法、正互反矩阵、强保序性、对数最小二乘法、列和求逆归一化方法等。层次分析法(AHP)是美国运筹学家托马斯·L·萨蒂(T.L.Saaty)在20世纪70年代提出的,旨在通过定性和定量的决策...
拟序具有反自反性、反对称性和传递性,偏序在此基础上增加了自反性,全序则要求所有元素两两可比较,而良序则是偏序集的子集在关系下都有最小元素。 在域的理论中,特征是描述域性质的重要属性。域是满足加、减、乘...
5. **验证**:在反序列化后,检查数据的有效性和完整性,以确保恢复的正确性。 在实际应用中,还需要考虑一些额外的问题,比如: - **版本控制**:当对象结构发生变化时,序列化库需要有能力处理旧版本的数据。 - *...