【问题标题】:Why isn't java.io.Bits public? [closed]为什么 java.io.Bits 不公开? [关闭]
【发布时间】:2014-11-06 23:14:20
【问题描述】:

我在 Java 中使用 IO 做了很多工作,在寻找将原语转换为字节数组并返回的代码之后,我在 Java 源代码托管网站之一上找到了 java.io.Bits 的源代码。快速浏览后,我意识到这正是我需要的,除了它是包私有的。所以我制作了一份我公开的副本,存储在我的项目包中并使用(我向你保证,仅在个人项目中)。我觉得它很有用。

我的问题是,为什么这个包是私有的?我可以看到它对于使用 IO 的人非常有用,而且我认为将其更改为公共的可见性(在 rt.jar 中)没有任何缺点。或者是否有等效的(请不要提及其他库)?

这是一个随机选择的网站的链接,该网站具有java.io.Bits 的 Java 源代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/Bits.java

【问题讨论】:

    标签: java private public class-visibility


    【解决方案1】:

    当然,它是包私有的,但也有公开相同行为的公共 API,例如ByteBuffer.wrap(array).getInt(index)ByteBuffer 上的其他方法。与尝试从 Java 封装或复制内部实现细节相比,您几乎可以肯定地使用正确设计、记录良好的公共 API 更好。

    【讨论】:

    • 我确实认为这是一个值得接受的答案,但由于我只能“接受”一个答案,所以你只能得到 +1。
    • 我不确定 ByteBuffer 与 java.io.Bits 的性能,所以进行了快速测试。结果表明,存储java.io.Bits最快,absolute BB紧随其后,读取absolute BB最快,相对big endian其次little endian,Bits最慢。这是我的测试的详细结果和 src 代码的 pastebin 链接:pastebin.com/XStkmN8s
    • 更新:我更新了 pastebin 以在我的 Ubuntu 机器上添加测试。他们非常支持 java.io.Bits,但大端绝对字节缓冲区紧随其后。
    【解决方案2】:

    您必须询问其中一位 Java 开发人员,但通过将其设为私有包,该 API 可以被视为“内部” - 即它可能随时更改或消失。这意味着 API 可以相对较快地开发,并且不需要经过公共 API 需要经过的相同的相对彻底的测试过程(因为一旦发布,它们就会永远卡在那里。)

    简而言之,将 API 公开具有长期影响,而且它需要的工作量远远超过点击开关。

    我敢猜测,它最初是作为一组“组合在一起”的函数,对 IO 包中的其他几个类很有用,从那以后就一直存在。

    【讨论】:

    • 您认为只制作个人副本并与应用程序一起分发可以吗?
    • @Nulano - 我很确定它不是。虽然我想这取决于你的应用程序的许可证。我相信现代 jdk 是 GPL,所以如果你的应用程序是 GPL,那么它可能没问题。
    • 查看代码中的内容,我会说它的代码非常简单;任何有能力的程序员都需要这样的方法,都会想出一个非常相似(如果不相同的话)的实现。虽然不是适当的理由;我猜代码的原创性不足以保证任何侵犯版权的索赔。
    • @Nulano:如果有我的回答中讨论的等效公共 API,为什么还要麻烦?
    • @LouisWasserman 实际上,java.io.Bits 显然比 java.nio.ByteBuffer 快,尽管在大多数情况下它可能只是一个微小的差异。 evanjones.ca/software/java-bytebuffers.htmljroller.com/cpurdy/entry/raw_nio_performance
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2019-05-07
    相关资源
    最近更新 更多