S3支持的java.io.File

S3支持的java.io.File,java,amazon-s3,Java,Amazon S3,下面是我对S3支持的Java文件的用例 File videoFile = new File(OUTPUT_FOLDER + "channel" + channel + "-" + System.currentTimeMillis() + ".mp4"); AWTSequenceEncoder encoder = AWTSequenceEncoder.createSequenceEncoder(videoFile, Long.valueOf(FPS).intValue()); for (Buff

下面是我对S3支持的Java
文件的用例

File videoFile = new File(OUTPUT_FOLDER + "channel" + channel + "-" + System.currentTimeMillis() + ".mp4");
AWTSequenceEncoder encoder = AWTSequenceEncoder.createSequenceEncoder(videoFile, Long.valueOf(FPS).intValue());
 for (BufferedImage image : bufferedImages) {
      encoder.encodeImage(image);
}
上面只是一个用例,我想知道是否存在一个S3支持的
文件
,可以作为
java.io.File
的管理单元替换;在上面的示例代码中,想法是替换
视频文件
,而不是将其持久化到磁盘,它将直接持久化到S3或S3兼容的存储


通过编译时还是运行时,哪一个是注入它的最佳位置

好吧,这样的事情根本不存在

最好是在操作系统级别实现一个支持S3的文件系统。(例如,使用
s3backer
)如果文件系统具有正确的属性,那么使用
java.io.file
的应用程序就不会知道区别

或者,使用自定义Java 7+
文件系统
,但您必须更改代码以停止使用
文件
,并开始使用更现代的API

(当然,如果您愿意深入研究并在本机代码级别修改JVM,任何事情都是可能的。但是,您引入了一大堆其他问题。)


通过编译时还是运行时,哪一个是注入它的最佳位置

这不是一个可行的选择。
java.io.File
的重要部分在JVM中以本机代码实现,并且不是“可插入”或“可注入的”。

实际上存在一个来自

经过研究,作者是以前的AWS架构师,该项目现在似乎被放弃了,但该许可证在Apache下,因此一个好的fork可能能够恢复它

至于回答注入S3文件的最佳位置,答案是编译时。但是,它可能会对基本源代码造成相当大的干扰:

S3File videoFile = new S3File(BUCKET_NAME, fileKey);
AWTSequenceEncoder encoder = AWTSequenceEncoder.createSequenceEncoder(videoFile, Long.valueOf(FPS).intValue());
 for (BufferedImage image : bufferedImages) {
      encoder.encodeImage(image);
}
像这样的东西会有用的

事实上,它应该与
S3File
一起工作,该文件的参数与
java.io.File
的参数完全相同,因此它可以用作
S3File videoFile=新的S3File(文件名)


其中,bucket名称和其他连接已经在构造函数中

可能是可能的,但这将是一个非常有限的
文件
对象,除非它首先在本地持久化数据,否则无法查找。我拥有的另一个重要用例是一些使用java.io.File持久化数据库数据的DB。一个很好的例子是在事务方面非常强大的数据库,但仍然使用
java.io.File
,这限制了它在可伸缩环境中的使用能力。。。因此,请与开发人员交谈:-)