使用SerialBlob vs byte []

时间:2013-04-29 23:08:11

标签: java mysql hibernate

我正在使用hibernate来存储和检索MySQL数据库中的数据。我使用的是字节数组,但遇到了SerialBlob类。我可以成功使用该类,但我似乎无法找到使用SerialBlob和字节数组之间的任何区别。有没有人知道你希望使用byte []的串行串口的基本差异或可能的情况?

1 个答案:

答案 0 :(得分:4)

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

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

如果您使用来解决上述任何问题,则应该使用SerialBlob

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

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

    您可以在类上使用方法,而不是手动数组处理,如果您不知道代码,则再次更容易阅读。您的代码的读者必须理解简单的数组操作。具有良好名称的方法具有自我描述性。

    这对您的队友以及一年内阅读此代码时的帮助很有帮助。

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

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

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

  4. 它已经写好了,看起来总是一样的。您不必为每个项目编写新的实现,也不必在十个不同的项目中读取十个不同的实现。如果您在任何人的项目中看到SerialBlob,您的使用情况将会很明确。每个人都使用相同的。


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