使用 SerialBlob 与 byte[]

2024-02-01

我正在使用 hibernate 来存储和检索 MySQL 数据库中的数据。我使用的是字节数组,但遇到了 SerialBlob 类。我可以成功使用该类,但我似乎找不到使用 SerialBlob 和字节数组之间的任何区别。有谁知道您希望使用 byte[] 的 SerialBlob 的基本区别或可能的情况是什么?


你是对的SerialBlob只是一个薄弱的抽象byte[], but:

  • 你在团队中工作吗?
  • 你有时会犯错误吗?
  • 你懒得写评论吗?
  • 您有时会忘记一年前的代码实际上是做什么的吗?

如果您回答上述任何问题时使用的是yes,你可能应该使用SerialBlob http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialBlob.html.

它与围绕简单数据结构的任何其他抽象基本相同(想想ByteBuffer,例如)或另一个类。你想用它来结束byte[], 因为:

  1. 它更具描述性。 Abyte[]可能是某种缓存,可能是循环缓冲区,也可能是某种出现问题的完整性检查机制。但如果你使用SerialBlob,很明显,这只是来自数据库/要存储在数据库中的二进制数据 blob。

    您可以使用类上的方法,而不是手动处理数组,如果您不了解代码,这也更容易阅读。即使是简单的数组操作也必须被代码的读者理解。具有好名称的方法是自我描述的。

    这对您的队友很有帮助,当您在一年后阅读此代码时,也会对您有所帮助。

  2. 它更能防错。每次你编写任何新代码时,你很可能在其中犯了一个错误。一开始它可能不可见,但它可能就在那里。这SerialBlob代码已经过世界各地数千人的测试,可以肯定地说您不会遇到任何与之相关的错误。

    即使您确定字节数组处理正确,因为它非常简单,但如果其他人在半年内找到您的代码并开始“优化”东西怎么办?如果他重复使用旧的斑点,或者弄乱了你的魔法阵填充怎么办?索引操作中的每一个差一错误都会损坏您的数据,并且可能无法立即检测到(您are编写单元测试,不是吗?)。

  3. 它限制您只能进行少数可能的交互。这实际上看起来像是一个缺点,但事实并非如此!它确保您在使用完 blob 后不会将其用作本地临时变量。它确保您不会尝试制作String摆脱它或任何愚蠢的事情。它确保您只会将其用作 blob。再次强调清晰度和安全性。

  4. 它已经写好了,而且看起来总是一样的。您不必为每个项目编写新的实现,也不必阅读十个不同项目中的十个不同的实现。如果你会看到一个SerialBlob在任何人的项目中,您都会清楚其用法。每个人都使用同一个。


TL; DR:几年前(或者可能仍在 C 语言中),使用byte[]就可以了。在 Java(以及一般的 OOP)中,尝试使用为工作设计的特定类,而不是原始(低级)结构,因为从长远来看,它更清楚地描述您的意图,产生更少的错误并减少代码的长度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SerialBlob 与 byte[] 的相关文章

随机推荐

  • 如何获取结构“Elf64_Rela”中的符号名称

    include
  • JDBC CallableStatement 和 Oracle SYS_REFCURSOR IN 参数?

    和标题中说的差不多 到底该怎么做呢 基本上我需要将空 空 引用游标作为 IN 参数传递给存储过程 spring s PreparedStatementSetter setValues public void setValues Prepar
  • 在 phpstorm 中配置 css 自动完成

    使用 PHPStorm 3 0 有没有办法控制 css 文件中的自动完成功能 我已禁用 首选项 gt 编辑器 gt 代码完成 中的所有内容 但我仍然观察到以下行为 假设我会尝试输入 list 当输入 list 并按空格键添加 括号时 PHP
  • Android:在 SearchView 中输入文本时防止弹出文本字段

    你好 Android 开发者 我的 Android 系统有问题搜索视图 http developer android com reference android widget SearchView html小部件 我想做的是将 实时 文本过
  • 无法通过 API 访问 Sitecore 项目字段

    我已向现有数据模板添加了一个包含几个新字段的新部分 当以普通用户帐户登录时 这些字段会正确显示 但是 当使用 API 访问字段时 item Fields FieldName 始终返回 NULL 我尝试过的事情 发布项目和相应的数据模板 授予
  • 我可以使用 ADFS 2.0 针对 SQL Server 对某些用户进行身份验证吗?

    我一直在使用 ADFS 对 AD 中的用户进行身份验证 并使用 VS 中的声明感知模板 我们的一些用户不会在 Active Directory 中 因此我想知道是否可以配置 ADFS 来查找这些用户的 SQL Server 然后正常进行 A
  • presentPopoverFromRect 在 iOS8 beta 中不显示弹出框

    我正在将 iOS7 1 iPad 应用程序迁移到 iOS8 我刚刚下载了 Xcode 6 Beta 并在模拟器上运行了该应用程序 我注意到的第一件事是在 iOS7 1 中运行良好的弹出窗口不再工作了 我创建弹出窗口的方式是 the popo
  • Redshift 上的数字无效

    我正在尝试将一些数据从阶段加载到关系环境 但发生了一些我无法弄清楚的事情 我正在尝试运行以下查询 SELECT CAST SPLIT PART some field 2 AS BIGINT cmt par FROM public some
  • VisualVM 无​​法采样内存

    我有一个配置了 JMXRemote 参数的 tomcat 实例 本地 VisualVM 能够在 CPU 上获取采样器 但不能在内存上获取采样器 内存按钮呈灰色 并显示一条摘要 内存采样 不可用 无法连接到目标应用程序 确保应用程序在支持的
  • Eclipse 代码格式化

    我有一些混合了 JavaScript HTML 和 twig 标记的 twig 文件 有没有办法使用 Eclipse 来 hi lite 一段代码并将其格式化为 JavaScript 然后 hi lite 另一部分并将其格式化为 HTML
  • Java - 为什么重写的方法被调用两次(或者至少看起来是这样)?

    下面有这个输出 Hello World main ConstructedDerivedClass 6 0 main ConstructedDerivedClass 6 0 public class ConstructedDerivedCla
  • 部署任何 Google Action 时突然出错

    更改后 从 开发 选项卡切换到 测试 选项卡时 我的所有操作都会出错 还有几天前工作的模型 看到之后 我尝试了另一个没有任何更改的项目 并且抛出了相同的错误 有人知道发生了什么事吗 该错误不提供信息 谷歌支持团队回答了我 问题出在 Chro
  • Django 管理员不会加载某些静态文件

    我在几个 django 项目中遇到了一个奇怪的问题 我正在尝试解决它 由于某种原因 管理区域的所有静态文件都正确加载 包括 js css 和图像 但侧导航栏的 2 个文件 与其他所有文件一起位于我的静态目录中 无法加载 这些文件是 nav
  • Julia 中的“==”和“===”比较运算符有什么区别?

    有什么区别 and Julia 中的比较运算符 ChrisRackauckas 的答案就其本身而言是准确的 即对于可变对象 然而 这个问题的含义远不止于此 所以我将在这里详细说明一下 The 运算符 的别名is函数 实现 Henry Bak
  • 线程“main”中的异常 java.lang.NoSuchFieldError:Factory

    最近将 POI jar 版本从 3 17 升级到 5 1 以及在 3 x 中工作的以下代码现在已损坏 jdk 1 8 Below are the set of Jar used 下面是我的存根 import java io File imp
  • 根据 Oracle APEX 4.0 中的项目更改页面标题

    在 Oracle APEX 4 0 中 我有一个客户数据库 我希望将页面标题更改为我选择编辑的客户的名称 我这样输入标题 https i stack imgur com Bo0cy png https i stack imgur com B
  • 将 ContentControl 放入 WPF DataTemplate 中?

    我有一个名为的自定义扩展器控件SpecialExpander 基本上只是一个标准Expander有一个漂亮的标题和几个属性 HeaderText and IsMarkedRead 我首先创建一个简单的类 public class Speci
  • “令牌已过期或撤销” - Google OAuth2 刷新令牌几天后就会过期

    我正在使用 Google Analytics API 来获取分析数据 我尝试使用以下步骤对其进行身份验证 在中创建了 OAuth 客户端 IDhttps console developers google com https console
  • Gradle Maven Bom 属性

    我正在考虑从 Maven 迁移到 gradle 在我们当前的设置中 我们有一个主 pom 定义了我们所有的版本依赖项 项目名称是 master pom 并包含如下片段
  • 使用 SerialBlob 与 byte[]

    我正在使用 hibernate 来存储和检索 MySQL 数据库中的数据 我使用的是字节数组 但遇到了 SerialBlob 类 我可以成功使用该类 但我似乎找不到使用 SerialBlob 和字节数组之间的任何区别 有谁知道您希望使用 b