java - 收到的每个数据包上都有新的 FileOutputStream 吗?或者保持 FileOutputStream 打开?

标签 java file io download fileoutputstream

我希望这是一个直接的设计问题。

上下文:

我可能正在通过套接字连接下载一个到多个文件。当从套接字读取字节[]时,我正在传递它们。我还知道将这些字节写入哪个文件。我将这些字节附加到文件中 FileOutputStream 。当文件的所有字节都已收到时,我也会收到通知。

问题:

这样更好吗:

  1. 保留 FileOutputStream打开直到所有字节都已被接收并写入
  2. 打开一个新FileOutputStream它将在收到字节时将字节附加到正确的文件中,然后每次关闭。

2 对我来说感觉更安全,因为我会在每次写入后关闭流,以防任何下载出现问题(比如我因某种原因停止获取字节)。但它似乎也不是很有效率。我无法找出打开和关闭的费用FileOutputStream s群岛除了需要额外注意了解何时关闭 FileOutputStream 之外,保持 FileOutputStream 打开还有其他副作用吗?

提前致谢。

最佳答案

您可以通过计时重新打开文件(例如 100 或 1000 次)所需的时间来测试重新打开文件的成本。

在我的机器上,大约需要 2.1 毫秒,因此如果文件速度为 750 KB/s 或更高,下载文件的速度可能会变慢。

如果您有一个不完整的文件,您是否想保持它正常,或者您宁愿知道该文件已损坏,甚至在无法正确下载时将其删除?

关于java - 收到的每个数据包上都有新的 FileOutputStream 吗?或者保持 FileOutputStream 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936505/

相关文章:

java - Play框架+Spring : Injecting URL from application.conf

java - java中减少一个变量直到达到一个数字

java - 从文本文件初始化对象数组

php - 在php中显示html文件的内容

django - 使用 'ImageKit' 对 django 中的已关闭文件进行 I/O 操作

java - Kafka 消费者偏移量超出范围,没有为分区配置重置策略

java - 如果我在gradle文件中添加了Lombock的依赖项,它将无法构建

java - 将远程服务器目录复制到本地计算机

java - 处理从套接字接收到的数据

java - 仅发送图像/视频文件时出错