यहाँ एक 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-संगत स्टोरेज पर बना रहेगा।

और कंपाइल-टाइम या रन-टाइम के माध्यम से इसे इंजेक्ट करने के लिए सबसे अच्छी जगह कौन सी है?

0
quarks 4 मार्च 2020, 04:19
संभव हो सकता है, लेकिन यह एक बहुत ही सीमित File ऑब्जेक्ट होने जा रहा है जो तब तक नहीं खोज सकता जब तक कि यह पहले स्थानीय रूप से डेटा को जारी न रखे।
 – 
kichik
4 मार्च 2020, 04:24

2 जवाब

AFAIK, ऐसी कोई चीज मौजूद नहीं है।

सबसे अच्छा आप ऑपरेटिंग सिस्टम स्तर पर S3-समर्थित फ़ाइल सिस्टम को लागू करने के लिए कर सकते हैं। (उदाहरण के लिए, s3backer linux मैन पेज) यदि फ़ाइल सिस्टम में सही गुण होते, तो java.io.File का उपयोग करने वाले अनुप्रयोगों को अंतर का पता नहीं चलता।

वैकल्पिक रूप से, कस्टम Java 7+ FileSystem javadoc, लेकिन File का उपयोग बंद करने और अधिक आधुनिक API का उपयोग शुरू करने के लिए आपको अपना कोड बदलना होगा।

(बेशक, यदि आप मूल कोड स्तर पर जेवीएम में गोता लगाने और संशोधित करने के इच्छुक थे, तो कुछ भी संभव होगा। लेकिन फिर आप अन्य समस्याओं का एक पूरा ढेर पेश कर रहे हैं।)


और संकलन-समय या रन-टाइम के माध्यम से इसे इंजेक्ट करने के लिए सबसे अच्छी जगह कौन सी है?

यह एक व्यवहार्य विकल्प नहीं है। java.io.File के महत्वपूर्ण हिस्से JVM में मूल कोड में लागू किए गए हैं और "प्लग करने योग्य" या "इंजेक्टेबल" नहीं हैं।

1
Stephen C 4 मार्च 2020, 05:15
मेरे पास एक और महत्वपूर्ण उपयोग मामला कुछ डीबी के लिए है जो डेटाबेस डेटा को बनाए रखने के लिए java.io.File का उपयोग करता है। एक अच्छा उदाहरण है github.com/JetBrains/xodus लेन-देन के मामले में एक बहुत शक्तिशाली डेटाबेस लेकिन फिर भी इसका उपयोग करता है java.io.File जो स्केलेबल वातावरण में उपयोग करने की क्षमता को सीमित करता है।
 – 
quarks
4 मार्च 2020, 04:36
अच्छा हाँ ... तो डेवलपर्स से बात करें :-)
 – 
Stephen C
4 मार्च 2020, 04:38

https://packages.atlassian.com/maven/com/squeakysand/aws/squeakysand-aws-s3/

शोध करने पर, लेखक पिछले एडब्ल्यूएस आर्किटेक्ट हैं, परियोजना अब छोड़ी गई प्रतीत होती है, लेकिन लाइसेंस अपाचे के अधीन है, इसलिए एक अच्छा कांटा इसे पुनर्जीवित करने में सक्षम हो सकता है।

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); के रूप में उपयोग किया जा सके।

जहां बकेट का नाम और अन्य कनेक्शन कंस्ट्रक्टर में पहले से ही है।

0
quarks 4 मार्च 2020, 09:53