我正在使用 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[]
, 因为:
-
它更具描述性。 Abyte[]
可能是某种缓存,可能是循环缓冲区,也可能是某种出现问题的完整性检查机制。但如果你使用SerialBlob
,很明显,这只是来自数据库/要存储在数据库中的二进制数据 blob。
您可以使用类上的方法,而不是手动处理数组,如果您不了解代码,这也更容易阅读。即使是简单的数组操作也必须被代码的读者理解。具有好名称的方法是自我描述的。
这对您的队友很有帮助,当您在一年后阅读此代码时,也会对您有所帮助。
-
它更能防错。每次你编写任何新代码时,你很可能在其中犯了一个错误。一开始它可能不可见,但它可能就在那里。这SerialBlob
代码已经过世界各地数千人的测试,可以肯定地说您不会遇到任何与之相关的错误。
即使您确定字节数组处理正确,因为它非常简单,但如果其他人在半年内找到您的代码并开始“优化”东西怎么办?如果他重复使用旧的斑点,或者弄乱了你的魔法阵填充怎么办?索引操作中的每一个差一错误都会损坏您的数据,并且可能无法立即检测到(您are编写单元测试,不是吗?)。
它限制您只能进行少数可能的交互。这实际上看起来像是一个缺点,但事实并非如此!它确保您在使用完 blob 后不会将其用作本地临时变量。它确保您不会尝试制作String
摆脱它或任何愚蠢的事情。它确保您只会将其用作 blob。再次强调清晰度和安全性。
它已经写好了,而且看起来总是一样的。您不必为每个项目编写新的实现,也不必阅读十个不同项目中的十个不同的实现。如果你会看到一个SerialBlob
在任何人的项目中,您都会清楚其用法。每个人都使用同一个。
TL; DR:几年前(或者可能仍在 C 语言中),使用byte[]
就可以了。在 Java(以及一般的 OOP)中,尝试使用为工作设计的特定类,而不是原始(低级)结构,因为从长远来看,它更清楚地描述您的意图,产生更少的错误并减少代码的长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)