当前位置:网站首页 > R语言数据分析 > 正文

ByteBuffer.wrap(bytebufferwrap会复制数组吗)



如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

简单来说:

序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式
反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程
对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。




下面是序列化和反序列化常见应用场景:

序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。

综上:序列化的主要目的是通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。

序列化协议对应于 TCP/IP 4 层模型的哪一层?

我们知道网络通信的双方必须要采用和遵守相同的协议。TCP/IP 四层模型是下面这样的,序列化协议属于哪一层呢?

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

因为,OSI 七层协议模型中的应用层、表示层和会话层对应的都是 TCP/IP 四层模型中的应用层,所以序列化协议属于 TCP/IP 协议应用层的一部分。

对于不想进行序列化的变量,使用 关键字修饰。

关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 修饰的变量值不会被持久化和恢复。

关于 还有几点注意:

  • 只能修饰变量,不能修饰类和方法。
  • 修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰 类型,那么反序列后结果就是 。
  • 变量因为不属于任何对象(Object),所以无论有没有 关键字修饰,均不会被序列化。

 

  1. 使用数据库进行持久化存储
    • 原理:将对象的属性映射到数据库表的列中,对于不想序列化的字段,可以在数据库存储过程中进行特殊处理,如使用加密算法存储敏感信息,或者直接忽略存储某些非关键字段。
    • 步骤示例(以 Java JDBC 和 MySQL 为例)
      • 创建数据库表:假设我们有一个对象,其中字段不想序列化。首先创建一个数据库表来存储用户信息。
 
  
  • 定义 Java 类和持久化方法
 
  
  • 使用示例
 
  

  • 优点:可以利用数据库的强大功能,如事务处理、数据备份、索引等。并且可以灵活地处理不想序列化的字段,如加密存储敏感信息。
  • 缺点:需要额外的数据库管理和配置工作,如安装数据库服务器、创建数据库和表等。并且对于复杂的对象关系,映射到数据库可能会比较复杂。
  1. 使用文件存储(不依赖序列化)
    • 原理:以自定义的文本格式或二进制格式将对象的属性存储到文件中,对于不想序列化的字段,可以选择不写入文件或者以其他特殊方式处理。
    • 步骤示例(以文本文件存储为例)
      • 定义存储格式和持久化方法:假设我们有一个对象,其中字段不想序列化。
 
  
  • 使用示例
 
  
  • 优点:简单直接,不需要额外的数据库等复杂环境。对于小型应用或者简单的数据存储需求比较方便。
  • 缺点:缺乏数据库的高级功能,如查询效率可能较低,数据安全性和完整性保障相对较弱。并且如果存储格式复杂,读写文件的代码可能会比较繁琐。
  1. 使用 NoSQL 数据库进行持久化存储
    • 原理:NoSQL 数据库(如 MongoDB、Redis 等)有自己独特的存储方式,对于不想序列化的字段,可以根据数据库的特点进行处理。例如在 MongoDB 中,可以在插入文档时选择不包含某些字段。
    • 步骤示例(以 MongoDB 为例)
      • 添加 MongoDB 依赖并连接数据库(使用 MongoDB Java Driver)
 
  
 
  
  • 使用示例
 
  
  • 优点:NoSQL 数据库通常具有高可扩展性和灵活性,能够很好地处理非结构化或半结构化数据,对于一些复杂的对象模型或者大数据量存储有优势。
  • 缺点:不同的 NoSQL 数据库有不同的查询语言和数据模型,需要学习和适应。并且在数据一致性等方面可能不如传统关系型数据库。
到此这篇ByteBuffer.wrap(bytebufferwrap会复制数组吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • dried怎么读(dried怎么读英语)2026-05-21 10:27:04
  • 将list转换成string(将list转换成set)2026-05-21 10:27:04
  • list<string>转换为数组(list转成string数组)2026-05-21 10:27:04
  • linux修改文件权限为root(linux修改文件权限为可读写)2026-05-21 10:27:04
  • nonplussed什么意思(noncompulsory是什么意思)2026-05-21 10:27:04
  • hadoop 查看yarn队列(hadoop集群查看)2026-05-21 10:27:04
  • redhat enterprise 下载(redhat download)2026-05-21 10:27:04
  • uchar i(uchar i,j;什么意思)2026-05-21 10:27:04
  • cruisin下载(cruisin下载百度云)2026-05-21 10:27:04
  • strreplace用法(strreplace用法替换)2026-05-21 10:27:04
  • 全屏图片