发送文件更好或输出流

时间:2012-05-28 17:47:43

标签: java file rest hbase fileoutputstream

在我的项目中,我们正在保存一些文件。 请求文件时,我从HBase表中获取文件,然后将其发送到浏览器。

数据保存在HBase中的字节中。因此,当我获取文件时,我会在字节中获取它。

现在我必须将这些字节转换为File对象或Output Stream。

我想知道的是,通过File对象发送文件是更好还是输出流?

文件的范围可以从1 MB到10 MS.

我正在使用REST API发送数据。

3 个答案:

答案 0 :(得分:2)

目前还不完全清楚你在做什么,但事实是java.io.File只是路径上的抽象,因此它不包含任何数据。因此,我不认为发送java.io.File对象会以任何方式帮助您,如果您想要做的是发送实际的文件内容。

发送OutputStream并不是有意义的,OutputStream只是一个类来控制字节流到给定的接收器中。您发送的是字节,而不是流(即,如果您的接收器是套接字,那么使用与此给定接收器关联的{{1}}通过套接字发送文件内容的字节是有意义的。

答案 1 :(得分:1)

发送java.io.File对象不会有帮助,因为它将是一个非常特定于java的二进制对象,它将强制接收系统在java中。

你提到过,你使用REST 。现在,这需要独立于任何技术/平台的东西。

一种可行的方法如下。

  1. 让其余的API返回一个指向用户希望下载的文件的URL。
  2. Write/Configure a Servlet获取此网址。
  3. 当此servlet收到请求时,它会读取数据库并写入响应流(输出流)。
  4. 用户将收到提示要求下载文件的提示。
  5. 这是使用servlet的example of PDF file download

答案 2 :(得分:1)

我假设问题是询问是直接写入OuputStream还是先将byte []保存到本地文件中。我想到首先保存到本地文件的唯一原因是将检索与HBase和用户的下载分离。如果您希望每个从HBase返回byte []的请求将整个文件返回给响应中的用户,请使用OutputStream。

话虽如此,检索10 MB作为byte []似乎每次请求可能会占用大量内存。您可能想看看是否可以让HBase为您提供一个InputStream,这样您每个请求就不需要高达10 MB的RAM。