मुझे एनआईओ का उपयोग कर सर्वरसॉकेट पर ~ 100 एमबी डेटा स्थानांतरित करना है, लेकिन मुझे यह पता नहीं लगाया जा सकता कि हस्तांतरण की स्थिति को किसी भी स्थान पर स्थानांतरित करने के बिना इसे कैसे किया जाए।जावा - चैनलों पर बड़ी फ़ाइलों को स्थानांतरित करना - एनआईओ
मेरा पहला विचार फ़ाइल का आकार भेजना था, जाहिर है कि मैं उन बड़ी फ़ाइलों का आकार नहीं भेज सकता क्योंकि यह एक बार में रैम पर भी फिट नहीं होगा। फिर मैंने सोचा, क्यों न टिल कुछ भी नहीं स्थानांतरण नहीं प्राप्त होता है, लेकिन thats जब समस्या में आता है।
यहां तक कि अगर मैं सर्वर तरफा डेटा लिख रहा हूँ हर समय
FileChannel fc = new FileInputStream(f).getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fc.read(buffer) > 0) {
buffer.flip();
while(channel.write(buffer) > 0);
buffer.clear();
}
लेकिन क्योंकि वहाँ टूट होना जरूरी फ़ाइल हस्तांतरण में डेटा को लगातार पढ़ने और कुछ भी उपलब्ध होने पर तोड़ना बुरा विचार था।
मैं यह नहीं समझ सकता कि मैं क्लाइंट को संभावित रूप से कैसे बता सकता हूं अगर डेटा के प्रत्येक टुकड़े को ओपोड आदि के साथ नए पैकेट के रूप में भेजने के बिना अभी भी डेटा उपलब्ध है, या यह भी संभव है?
मैं भी अगर थेरेस बेहतर तरीका
नीचेwhile(channel.write(buffer) > 0);
मैंने इसका हिस्सा जवाब दिया है, लेकिन मुझे यह कहना होगा कि मुझे समझ में नहीं आता कि "कुछ समय में फ़ाइल स्थानांतरण में ब्रेक होना चाहिए" और "डेटा को लगातार पढ़ना और कुछ भी उपलब्ध नहीं होने पर तोड़ना बुरा विचार था "। कृपया समझाएँ। – EJP