2011-11-22 15 views
5

कच्चे बाइट स्ट्रीम का उपयोग करके मेरे कॉन्फ़्रेंस चैट एप्लिकेशन में टीसीपी फ़ाइल स्थानांतरण को कार्यान्वित करने की कोशिश करने के बाद, मैंने तय किया है कि ऑब्जेक्ट स्ट्रीम के माध्यम से फ़ाइलों को भेजने के लिए यह बहुत आसान है। फ़ाइलों को उनके गंतव्य पर भेजा और संग्रहीत किया जाता है (चाहे वह केंद्रीय सर्वर या डाउनलोड क्लाइंट है) इन-मेमोरी फ़ाइल ऑब्जेक्ट्स के रूप में। हालांकि, इन फ़ाइलों को फ़ाइल ऑब्जेक्ट्स के रूप में उपयोग नहीं किया जाता है - क्लाइंट उन्हें खोलने में सक्षम होना चाहिए। जावा ऑब्जेक्ट्स को हार्ड ऑब्जेक्ट फाइलों के रूप में सहेजने या जावा के माध्यम से उन्हें खोलने के लिए जावा में कोई तरीका है?जावा सेविंग/ओपनिंग फाइल ऑब्जेक्ट्स

उत्तर

8

"फाइल ऑब्जेक्ट्स" के साथ आपका क्या मतलब है; क्या आपका मतलब java.io.File है?

कक्षा java.io.File केवल एक निर्देशिका नाम और फ़ाइल नाम का प्रतिनिधित्व है। यह ऐसी वस्तु नहीं है जो फ़ाइल की सामग्री को पकड़ सके।

आप डेटा है, तो उदाहरण के लिए स्मृति में एक बाइट सरणी, तो हाँ, आपको लगता है कि एक फाइल करने के लिए बचा सकता है में:

byte[] data = ...; 

OutputStream out = new FileOutputStream(new File("C:\\someplace\\filename.dat")); 
out.write(data); 
out.close(); 

पढ़ने और लिखने के लिए कैसे जानने के लिए Oracle की जावा ट्यूटोरियल से Basic I/O Lesson देखें FileInputStream और FileOutputStream वाली फ़ाइलें।

+0

मेरा बुरा, यह नहीं पता था कि java.io.File फ़ाइल सामग्री को पकड़ने में सक्षम नहीं था। चित्र पर वापस बोर्ड तो :( –

1

आप देखने में Data Handlers

आप उन्हें Data Sources के रूप में, लेकिन आप के लिए एक "पारदर्शी" रास्ते में फ़ाइलों को हस्तांतरण करने का उपयोग कर सकते चाहिए।

+0

धन्यवाद, भविष्य में उन्हें देखेंगे। –

0

मैं तय कर लिया है कि यह बहुत आसान है फ़ाइलें मैं वस्तु धाराओं के माध्यम से हस्तांतरित चाहते हैं कि भेजने के लिए "

यह बुरा विचार नहीं है:।। स्मृति और विलंबता (यानी समय और स्थान) की लागत बस बाइट्स को भेजें और प्राप्त करें, आपको फ़ाइल नाम और फ़ाइल आकार बताने के लिए सामने रखें।

+0

मैंने प्रिंटवाइटर का उपयोग करके पहले फ़ाइल नाम भेजने की कोशिश की, एक डी तो BufferedOutputStream का उपयोग कर कच्चे बाइट्स। फ़ाइल नाम और बाइट प्रेषक पक्ष से कोई समस्या नहीं भेजेंगे। रिसीवर पक्ष फ़ाइल नाम भी प्राप्त कर सकता है, हालांकि इसे कच्चे बाइट्स में से कोई भी प्राप्त नहीं हो सका - यह सिर्फ खाली फाइलें बना। जब मैंने ऑब्जेक्ट स्ट्रीम का उपयोग करने के लिए स्विच किया, तो यह काम करना प्रतीत होता था? –

+1

@ रिचर्डस्टोक जो कभी काम नहीं करेगा। कनेक्शन के जीवन के लिए दोनों सिरों पर एक ही धारा का प्रयोग करें। PrintWriter में एक बफर है, BufferedOutputStream में एक बफर है, BufferedReader में एक बफर है, और BufferedInputStream में एक बफर है। तार भर में समन्वय के लिए बहुत सारे बफर। मैं सब कुछ के लिए DataOutputStream/DataInputStream का उपयोग करूँगा, writeUTF()/readUTF() के साथ फ़ाइल नाम भेजना, लिखने के साथ लंबाई()/readLong(), और लिखने वाले डेटा() और पढ़ें()। – EJP

+0

वाह धन्यवाद, एक शानदार पूरी तरह से टिप्पणी। –

संबंधित मुद्दे