在我的项目中,我们正在保存一些文件。 当请求文件时,我从HBase表中获取文件,然后将其发送到浏览器。发送文件更好或输出流
数据保存在HBase的Bytes中。所以当我获取文件时,我会以字节形式获取它。
现在我必须将这些字节转换为File对象或输出流。
我想知道的是通过File对象发送文件更好还是Output Stream?
该文件可以从1 MB到10个MS不等。
我正在使用REST API发送数据。
在我的项目中,我们正在保存一些文件。 当请求文件时,我从HBase表中获取文件,然后将其发送到浏览器。发送文件更好或输出流
数据保存在HBase的Bytes中。所以当我获取文件时,我会以字节形式获取它。
现在我必须将这些字节转换为File对象或输出流。
我想知道的是通过File对象发送文件更好还是Output Stream?
该文件可以从1 MB到10个MS不等。
我正在使用REST API发送数据。
发送一个java.io.File对象不会有帮助,因为它将是一个非常特殊的二进制对象并且它会要求接收系统在java中。
您提到,您是使用REST。现在,这需要独立于任何技术/平台的东西是。
一种可行的方法如下。
这是使用servlet的example of PDF file download。
发送文件只是一个*完全浪费时间。*它只是一个文件名,它只在它创建的服务器上有意义。 – EJP
这并不完全清楚你在做什么,但事实是,java.io.File
只是一个路径的抽象,因此它不包含任何数据。因此,我不认为发送一个java.io.File
对象会以任何方式帮助你,如果你想要做的是发送实际的文件内容。
发送一个OutputStream
是不合理的,它只是一个类来控制字节流到给定接收器中。你发送的是字节,而不是流(即如果你的接收器是一个套接字,那么使用与这个给定接收器相关联的OutputStream
通过套接字发送文件内容的字节是有意义的)。
在我看来,这是不正确的。我通过REST将图像作为文件对象发送,我可以在浏览器上查看它们。 – JHS
这是语义。 –
@Juniad *我通过REST发送图像作为文件对象,我可以在浏览器上查看它们。*您将它们看作是什么? 1.图像显示为图像。 2.一个图片src指向一个URL。 3.别的东西。从不同的网络调用您的REST API并测试它是否正常工作。 –
我假设问题是询问是直接写入OuputStream还是首先将byte []保存到本地文件。我能想到的首先保存到本地文件的唯一原因是将检索与HBase和用户的下载分开。如果您希望每个从HBase返回一个byte []的请求将整个文件返回给响应中的用户,请使用OutputStream。
话虽如此,检索10 MB作为一个字节[]似乎可能会消耗大量的内存每个请求。你可能想看看你能否让HBase给你一个InputStream,所以你不需要每个请求高达10MB的内存。
真的很重要吗?为了发送文件,你不需要一个文件,这意味着一堆IO来创建一些东西发送,然后就会消失? –