首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送文件更好还是输出流

发送文件更好还是输出流
EN

Stack Overflow用户
提问于 2012-05-29 01:47:43
回答 3查看 2.2K关注 0票数 1

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

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

现在,我必须将这些字节转换为File对象或输出流。

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

文件大小从1 MB到10毫秒不等。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-29 02:15:25

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

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

一种可行的方法如下。

  1. 让rest API返回一个指向用户希望下载的文件的URL。此user的
  2. Write/Configure a Servlet
  3. 当此servlet收到请求时,它将读取数据库并写入响应流(输出流)。
  4. 用户将收到要求下载文件的提示。

这是一个使用servlet的example of PDF file download

票数 1
EN

Stack Overflow用户

发布于 2012-05-29 01:52:06

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

发送一个OutputStream也没有意义,因为它只是一个控制字节流到给定接收器的类。您发送的是字节,而不是流(即,如果您的接收器是一个套接字,那么使用与此给定接收器关联的OutputStream通过套接字发送文件内容的字节是有意义的)。

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 02:15:43

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

话虽如此,作为一个byte[]检索10MB似乎每次请求都会消耗大量内存。您可能想看看是否可以让HBase给您一个InputStream,这样您就不需要每个请求最多10MB的内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10788595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档