簡體   English   中英

S3 支持的 java.io.File

[英]S3-backed java.io.File

這是我使用 S3 支持的 Java File用例

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 支持的File ,可以用作java.io.File的管理單元替代品; 在上面的示例代碼中,想法是替換videoFile而不是持久化到磁盤,它將直接持久化到 S3 或 S3 兼容的存儲。

哪個是通過編譯時或運行時注入它的最佳位置?

AFAIK,不存在這樣的事情。

您能做的最好的事情是在操作系統級別實施 S3 支持的文件系統。 (例如,使用s3backerlinux 手冊頁)如果文件系統具有正確的屬性,則使用java.io.File應用程序不會知道其中的區別。

或者,使用自定義 Java 7+ FileSystem javadoc ,但您必須更改代碼以停止使用File並開始使用更現代的 API。

(當然,如果您願意在本機代碼級別深入研究並修改 JVM,那么一切皆有可能。但是,您會引入一大堆其他問題。)


哪個是通過編譯時或運行時注入它的最佳位置?

這不是一個可行的選擇。 java.io.File的重要部分在 JVM 中以本機代碼實現,不是“可插入的”或“可注入的”。

實際上存在來自https://packages.atlassian.com/maven/com/squeakysand/aws/squeakysand-aws-s3/S3File (或曾經)

經研究,作者是之前的AWS架構師,現在這個項目好像被放棄了,但是license是在Apache下的,一個好的fork或許能把它復活。

至於回答注入S3File 的最佳位置,答案是編譯時。 但是,它可能會對基本源代碼造成很大的干擾:

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 = new S3File(fileName);

存儲桶名稱和其他連接已在構造函數中的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM