我用哪种类型来表示Java中的任意blob?

Han*_*etz 2 java data-modeling

我有一个应用程序可以通过各种方法和各种格式接收数据.我有可插拔的接收器,以某种方式获取数据(例如通过轮询邮箱,监听HTTP请求,监视目录的内容等),将其与MIME类型相关联,然后将其传递给包装如下:

public class Transmission {
    private String origin;      // where the data came from
    private String destination; // where the data was sent to
    private String mime;        // the MIME type of the data
    private BLOB data;          // this is what I need an appropriate type for
}
Run Code Online (Sandbox Code Playgroud)

在线下,数据由专业处理程序根据mime字段的值进行处理.我期待像ZIP文件,Excel文档,SOAP,通用XML,纯文本等等.此时,代码应该与数据中的内容无关.这个data领域的适当类型是什么?ObjectInputStreamByte[]

dme*_*ter 7

多种可能性:

  • 字节[]
    • 最直接的方式
  • 字节缓冲区
    • 灵活
    • 具有随机访问和批量操作
    • 有复制,切片等操作
    • IO /网络密集型(NIO)
  • 的InputStream
    • 如果做得好,允许流水线操作
    • 不支持随机访问或批量操作.
    • 不如ByteBuffer灵活.

我不会使用Blob,因为将与DB相关的东西放入我们的主模型似乎很奇怪.


R. *_*des 5

我会选择 或byte[]InputStream更喜欢流,因为它更灵活。如果需要,您可以使用 aByteArrayInputStream为其提供字节数组。但你不能反过来做。

还有内存效率的好处,因为流可以处理大量外部数据而无需太多内存。如果使用则byte[]需要将所有数据加载到内存中。换句话说,流是惰性的。

  • byte[] 是的,Byte[] 绝对不! (2认同)