Java - 处理大文件

标签 java arrays file spring-mvc

我正在开发一个 spring mvc 应用程序。在这个时候我需要有文件下载的 Action 。由于this post我的 Controller 现在的 Action 是这样的:

 @RequestMapping(value = "/file/{id}", method = RequestMethod.GET, produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void getFile(@PathVariable("id") int id, HttpServletResponse response) throws FileNotFoundException {

    //fetch file record from database
    Files file = orchService.fileFind(id);

    //directory of the file is based on file ID(this is not important in this question)
    InputStream inputStream = new FileInputStream(myFileDirectory);
    response.setHeader("Content-Disposition", "attachment; filename=\"filename " + file.getId() + "."+file.getExtension()+"\"");
    int read=0;

    byte[] bytes = new byte[];

    //remaining of code
}

我的问题出在 bytes 声明上。 file 有一个返回文件大小的 long getSize() 方法。但我不能使用 byte[] bytes = new byte[file.getSize()];,因为数组大小必须是整数值。我该如何解决这个问题?

我不想将整个文件复制到内存中。

最佳答案

使用IOUtils并且只复制流(文件流到响应流)

copy(InputStream input, OutputStream output)

将字节从 InputStream 复制到 OutputStream。

copy(InputStream input, OutputStream output, int bufferSize)

使用给定大小的内部缓冲区将字节从 InputStream 复制到 OutputStream。

关于Java - 处理大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27873899/

相关文章:

java - 试图在 java 中将证书添加到我的 post 方法

java - 评估来自 SAML 集成的响应时出现 KeyCloak NullPointer 异常

python - 我只需要附加那些在 pyspark 数据框中具有非空值的人

c# - 字节序列化

java - 复制文件。查找它的路径

java - 无法启动 ComponentInfo java.lang.NullPointerException

python - 如何连接向量以在循环中创建数组?

java - Java中的重复文件 channel

c# - 使用 NUnit 进行测试时应该如何处理数据文件?

java - 如何使用restfb在Facebook中获取附加评论图片?