在我的项目中,我们正在保存一些文件。 请求文件时,我从HBase表中获取文件,然后将其发送到浏览器。
数据保存在HBase中的字节中。因此,当我获取文件时,我会在字节中获取它。
现在我必须将这些字节转换为File对象或Output Stream。
我想知道的是,通过File对象发送文件是更好还是输出流?
文件的范围可以从1 MB到10 MS.
我正在使用REST API发送数据。
答案 0 :(得分:2)
目前还不完全清楚你在做什么,但事实是java.io.File
只是路径上的抽象,因此它不包含任何数据。因此,我不认为发送java.io.File
对象会以任何方式帮助您,如果您想要做的是发送实际的文件内容。
发送OutputStream
并不是有意义的,OutputStream
只是一个类来控制字节流到给定的接收器中。您发送的是字节,而不是流(即,如果您的接收器是套接字,那么使用与此给定接收器关联的{{1}}通过套接字发送文件内容的字节是有意义的。
答案 1 :(得分:1)
发送java.io.File对象不会有帮助,因为它将是一个非常特定于java的二进制对象,它将强制接收系统在java中。
你提到过,你使用REST 。现在,这需要独立于任何技术/平台的东西。
一种可行的方法如下。
这是使用servlet的example of PDF file download。
答案 2 :(得分:1)
我假设问题是询问是直接写入OuputStream还是先将byte []保存到本地文件中。我想到首先保存到本地文件的唯一原因是将检索与HBase和用户的下载分离。如果您希望每个从HBase返回byte []的请求将整个文件返回给响应中的用户,请使用OutputStream。
话虽如此,检索10 MB作为byte []似乎每次请求可能会占用大量内存。您可能想看看是否可以让HBase为您提供一个InputStream,这样您每个请求就不需要高达10 MB的RAM。