मेरे ऐप में, मैं सॉकेट का उपयोग कर क्लाइंट से एक फाइल भेज रहा हूं। दूसरी ओर, दूसरा क्लाइंट इनपुटस्ट्रीम का उपयोग करके फ़ाइल प्राप्त करता है और फिर बफ़रडऑटपुटस्ट्रीम सिस्टम में फ़ाइल को सहेजता है।

मुझे नहीं पता क्यों, फ़ाइल पूरी तरह से प्रेषित नहीं है। मुझे लगता है कि यह नेटवर्क अधिभार के कारण है, वैसे भी, मुझे नहीं पता कि इसे कैसे हल किया जाए।

ट्रांसमीटर है:

Log.d(TAG,"Reading...");
                bufferedInputStream.read(byteArrayFile, 0, byteArrayFile.length);
                Log.d(TAG, "Sending...");
                bufferedOutputStream.write(byteArrayFile,0,byteArrayFile.length);

bufferedOutputStream.flush();

रिसीवर है:

 bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file));
                            byteArray=new byte[fileSize];

                            int currentOffset = 0;

                            bytesReaded = bufferedInputStream.read(byteArray,0,byteArray.length);
                            currentOffset=bytesReaded;

                            do {
                                bytesReaded = bufferedInputStream.read(byteArray, currentOffset, (byteArray.length-currentOffset));
                                if(bytesReaded >= 0){ currentOffset += bytesLeidos;
                               }
                            } while(bytesReaded > -1 && currentOffset!=fileSize);


                            bufferedOutputStream.write(byteArray,0,currentOffset);
1
MM Manuel 24 अप्रैल 2016, 13:11
बाइट्स के मान को लॉग करने का प्रयास करेंपढ़ें और देखें कि यह कैसा चल रहा है
 – 
AdamSkywalker
24 अप्रैल 2016, 13:16
आम तौर पर, अपने डीबगर के साथ आगे बढ़ने और परिवर्तनीय मानों का निरीक्षण करने की अनुशंसा की जाती है।
 – 
Martin James
24 अप्रैल 2016, 13:16
मैंने इसे पहले किया है। उदाहरण के लिए, यदि फ़ाइल में 10000 बाइट्स हैं, तो 9000 बाइट्स प्राप्त होने पर यह अटक जाती है।
 – 
MM Manuel
24 अप्रैल 2016, 13:17

1 उत्तर

सबसे बढ़िया उत्तर

आप यह नहीं बताते कि filesize कहां से आया, लेकिन इस कोड के साथ कई समस्याएं हैं। उल्लेख करने के लिए बहुत सारे। यह सब फेंक दें और DataInputStream.readFully() का प्रयोग करें। या निम्न प्रतिलिपि लूप का उपयोग करें, जिसके लिए फ़ाइल के आकार के बफर की आवश्यकता नहीं है, एक तकनीक जो स्केल नहीं करती है, मानती है कि फ़ाइल का आकार int में फिट बैठता है, और विलंबता जोड़ता है:

byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

इसे दोनों सिरों पर इस्तेमाल करें। यदि आप एक ही कनेक्शन के माध्यम से कई फाइलें भेज रहे हैं तो यह अधिक जटिल हो जाता है, लेकिन आपने ऐसा नहीं कहा है।

3
user207421 26 नवम्बर 2017, 02:01
आपके लूप में, "इन" वैरिएबल "इनपुटस्ट्रीम" होगा?
 – 
MM Manuel
24 अप्रैल 2016, 13:25
बेशक, और out एक OutputStream होगा। मुझे नहीं लगा कि यह बताने की जरूरत है।
 – 
user207421
24 अप्रैल 2016, 13:27
प्रत्येक लेखन घटना "गिनती" में ऑफ़सेट नहीं बढ़ाया जाना चाहिए?
 – 
MM Manuel
24 अप्रैल 2016, 13:46
नहीं, यह बफर में ऑफसेट है, लक्ष्य स्ट्रीम में नहीं।
 – 
user207421
24 अप्रैल 2016, 15:04