4

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

4

1 回答 1

5

你是对的,这SerialBlob只是围绕 a 的一个薄抽象byte[],但是:

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

如果您以“是”回答上述任何问题,您可能应该使用SerialBlob.

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

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

    您可以在类上使用方法,而不是手动处理数组,如果您不了解代码,这同样更容易阅读。即使是微不足道的数组操作也必须被代码的读者理解。一个有好名字的方法是自我描述的。

    这对你的队友很有帮助,也对你一年后阅读这段代码很有帮助。

  2. 这是更多的错误证明。每次您编写任何新代码时,您都极有可能在其中犯了错误。起初它可能不可见,但它可能在那里。该SerialBlob代码已经过全球数千人的测试,可以肯定地说您不会遇到任何与之相关的错误。

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

  3. 它将您限制在少数可能的交互中。这实际上可能看起来像一个缺点,但事实并非如此!它确保您在完成后不会将 blob 用作局部临时变量。它可以确保您不会试图利用String它或任何愚蠢的东西。它确保您只会将其用作 blob。再次,清晰和安全。

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


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

于 2013-04-30T00:12:15.003 回答