当前位置: 首页 > 知识库问答 >
问题:

j2ee下载一个文件是否在后端使用相同的文件?

阎俊英
2023-03-14

Webapp在我的项目中提供基于最终用户搜索的下载CSV文件功能,它正在做以下工作:

打开一个文件“download.csv”(不使用file.createTempFile(字符串前缀、字符串后缀、文件目录);但始终只使用“download.csv”),从Sql记录集中写入数据行,然后使用FileUtils将该文件的内容复制到servlet的outputStream。

记录集基于搜索条件,比如1月1日到3月30日。

这是否会导致一种潜在的情况,即文件包含两个用户的内容,他们同时提交不同的日期范围/其他过滤器,因此JVM并发地处理请求?

唯一的缺点是数据的写入速度会比文件副本慢。就像记录集中有更多的数据一样,通过它迭代需要时间。但请求的总时间应该更短?(因为写入文件输出流的时间相同+从文件复制到servlet输出流的时间)。

有人围绕这个做过测试并且有测试用例或解决方案可以分享吗?

共有1个答案

姚昊焱
2023-03-14

如果你真的想深入研究这两个部分的话,这是一个很棘手的问题。

并发性

正如您所写的,如果您使用的是多线程系统(现在几乎所有的系统都是这样的),那么“同名”可能会导致竞争条件。我见过一些这样的编码,它会引起很多麻烦。结果文件不仅可以包含来自两个搜索的行,还可以包含合并的字符。

Thread 1 wants to write: 123456789\n
Thread 2 wants to write: abcdefghi\n
123456789
abcdefghi
1234abcd56789
efghi

如果深入的话,拥有磁盘IO是一件棘手的事情。速度可以在一定范围内变化。在JVM中,您还可以有blockingnon-blockingIO。阻塞一个可以等到数据真的在磁盘上,另一个会做一些“魔术”来刷新文件。这里有很好的读物。

TL.Dr.:作为一个经验法则,最好把东西放在内存中(如果它能放进去的话),而不是麻烦磁盘。如果您也将线程内存用于此目的,那么您也可以避免并发问题。因此,在您的情况下,重写给定的部分以仅利用内存并写入输出可能会更好。

 类似资料:
  • 我想单击单击时下载文件的按钮,并测试是否已下载预期的文件。 我已经用谷歌搜索过这个,但不幸的是没有找到关于这个主题的任何具体答案,我找到的很多帖子都已经过时了(2014 年),我敢打赌 Selenium 现在一定已经改变了 API 定义。

  • 问题内容: 我在这里找到了一些有关如何下载文件的示例,但其中大多数似乎都在使用HttpURLConnection。HttpClient可以下载文件吗? 问题答案: 使用httpclient非常简单。这是本教程的链接。 http://hc.apache.org/httpcomponents-client- ga/tutorial/html/fundamentals.html#d5e43

  • 我有一个问题,通过phpmailer脚本发送带有附件的电子邮件。我有一个工作代码,如果我想添加一个单一的文件到邮件。但是当涉及到多个文件时,看起来它们甚至没有上传。 单个文件的我的代码: } 我尝试了一些代码,这些代码应该循环遍历$\u文件中的所有文件,但没有成功。然后我测试了以下代码: 它返回0。我知道$\u文件是空的,但我不知道原因。我需要缓冲文件或类似的东西吗? 编辑:这是我的html代码,

  • 问题内容: 我想创建一个与此服务类似的服务(从Here引用),以在Android中异步下载多个文件。 用户可以选择不同片段中的下载项目。我的策略是,随着用户选择项目并按下下载按钮,这些项目将被传递到其中,负责下载文件。然后将下载任务添加到中。 这里有一些问题: 我知道是由某些已定义的操作触发的。但是我想要创建一个后台服务,监视,如果有新消息可用,那么将调用一些线程来操作任务。 如果我对这个定制商品

  • 本文向大家介绍Python判断两个文件是否相同与两个文本进行相同项筛选的方法,包括了Python判断两个文件是否相同与两个文本进行相同项筛选的方法的使用技巧和注意事项,需要的朋友参考一下 python判断两个文件是否相同 计算2个文件的MD5值,大文件计算较慢 python对两个文本进行相同项筛选 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大

  • 我需要从服务器下载一个文本文件,并将其保存在内存中。然后一行行地去读。更好的是直接从服务器逐行离读。 编辑:“将其保存在内存中”的意思是不将其写入文件。 你会怎么做? 谢谢!