我希望这是一个直接的设计问题。
上下文:
我可能正在通过套接字连接下载一个到多个文件。当从套接字读取字节[]时,我正在传递它们。我还知道将这些字节写入哪个文件。我将这些字节附加到文件中 FileOutputStream
。当文件的所有字节都已收到时,我也会收到通知。
问题:
这样更好吗:
- 保留
FileOutputStream
打开直到所有字节
都已被接收并写入 - 打开一个新
FileOutputStream
它将在收到字节时将字节附加到正确的文件中,然后每次关闭。
2 对我来说感觉更安全,因为我会在每次写入后关闭流,以防任何下载出现问题(比如我因某种原因停止获取字节)。但它似乎也不是很有效率。我无法找出打开和关闭的费用FileOutputStream
s群岛除了需要额外注意了解何时关闭 FileOutputStream 之外,保持 FileOutputStream 打开还有其他副作用吗?
提前致谢。
最佳答案
您可以通过计时重新打开文件(例如 100 或 1000 次)所需的时间来测试重新打开文件的成本。
在我的机器上,大约需要 2.1 毫秒,因此如果文件速度为 750 KB/s 或更高,下载文件的速度可能会变慢。
如果您有一个不完整的文件,您是否想保持它正常,或者您宁愿知道该文件已损坏,甚至在无法正确下载时将其删除?
关于java - 收到的每个数据包上都有新的 FileOutputStream 吗?或者保持 FileOutputStream 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936505/