在我的项目中,我们保存了一些文件。当请求一个文件时,我从HBase表中获取该文件,然后将其发送到浏览器。
数据以字节为单位保存在HBase中。因此,当我获取文件时,我会以字节为单位获取它。
现在,我必须将这些字节转换为File对象或输出流。
我想知道的是通过file对象发送文件更好还是通过输出流发送文件更好?
文件大小从1 MB到10毫秒不等。
我正在使用REST API发送数据。
发布于 2012-05-29 02:15:25
发送java.io.File对象不会有帮助,因为它将是一个非常java特定的二进制对象,并且它将强制要求接收系统是在java中。
你提到过,你正在使用REST进行。现在,这需要独立于任何技术/平台的。
一种可行的方法如下。
这是一个使用servlet的example of PDF file download。
发布于 2012-05-29 01:52:06
不完全清楚您在做什么,但事实是,java.io.File只是路径上的抽象,因此它不包含任何数据。因此,如果您想要做的是发送实际的文件内容,我认为发送java.io.File对象对您没有任何帮助。
发送一个OutputStream也没有意义,因为它只是一个控制字节流到给定接收器的类。您发送的是字节,而不是流(即,如果您的接收器是一个套接字,那么使用与此给定接收器关联的OutputStream通过套接字发送文件内容的字节是有意义的)。
发布于 2012-05-29 02:15:43
我假设问题是询问是直接写入OuputStream还是先将byte[]保存到本地文件。我能想到的首先保存到本地文件的唯一原因是将检索与HBase和用户下载解耦。如果您希望每个从HBase返回byte[]的请求都在响应中将整个文件返回给用户,请使用OutputStream。
话虽如此,作为一个byte[]检索10MB似乎每次请求都会消耗大量内存。您可能想看看是否可以让HBase给您一个InputStream,这样您就不需要每个请求最多10MB的内存。
https://stackoverflow.com/questions/10788595
复制相似问题