एक समय में पाठ की एक पंक्ति पढ़ना, और कहा जाता है कि एक स्ट्रिंग को अलग-अलग करने के लिए लाइन अलग-अलग समय है और दोनों प्रत्येक लाइन और इतने सारे विधि चालान के उपरि निकालने में समय लेने वाली हैं।
मैं स्ट्रीम डेटा को रखने के लिए एक सभ्य आकार के बाइट सरणी को आवंटित करके बेहतर प्रदर्शन प्राप्त करने में सक्षम था, और जो कि जरूरत पड़ने पर एक बड़े सरणी के साथ बदल दिया जाता है, और जितना संभव हो उतना पढ़ने की कोशिश कर सकता है।
किसी कारण से, एंड्रॉइड बार-बार पूरी फाइल को डाउनलोड करने में विफल रहा जब कोड का उपयोग HTTPStrlConnection द्वारा दिए गए InputStream का उपयोग किया गया था, इसलिए मुझे यह सुनिश्चित करने के लिए कि मुझे पूरी फ़ाइल मिलेगी या रद्द करना है, दोनों के लिए एक बफर-राइडर और एक हाथ से चलने वाले टाइमआउट तंत्र का उपयोग करना होगा। तबादला।
private static final int kBufferExpansionSize = 32 * 1024;
private static final int kBufferInitialSize = kBufferExpansionSize;
private static final int kMillisecondsFactor = 1000;
private static final int kNetworkActionPeriod = 12 * kMillisecondsFactor;
private String loadContentsOfReader(Reader aReader)
{
BufferedReader br = null;
char[] array = new char[kBufferInitialSize];
int bytesRead;
int totalLength = 0;
String resourceContent = "";
long stopTime;
long nowTime;
try
{
br = new BufferedReader(aReader);
nowTime = System.nanoTime();
stopTime = nowTime + ((long)kNetworkActionPeriod * kMillisecondsFactor * kMillisecondsFactor);
while(((bytesRead = br.read(array, totalLength, array.length - totalLength)) != -1)
&& (nowTime < stopTime))
{
totalLength += bytesRead;
if(totalLength == array.length)
array = Arrays.copyOf(array, array.length + kBufferExpansionSize);
nowTime = System.nanoTime();
}
if(bytesRead == -1)
resourceContent = new String(array, 0, totalLength);
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
if(br != null)
br.close();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
संपादित करें: यह पता चला है कि अगर आपको सामग्री को फिर से एन्कोडेड करने की आवश्यकता नहीं है (यानी, आप आईएस के रूप में सामग्री चाहते हैं ) तो आपको किसी भी पाठक उपवर्ग का उपयोग नहीं करना चाहिए। बस उपयुक्त स्ट्रीम उपवर्ग का उपयोग करें।
पूर्ववर्ती विधि की शुरुआत को 2 से 3 बार अतिरिक्त गति देने के लिए निम्नलिखित पंक्तियों के साथ बदलें ।
String loadContentsFromStream(Stream aStream)
{
BufferedInputStream br = null;
byte[] array;
int bytesRead;
int totalLength = 0;
String resourceContent;
long stopTime;
long nowTime;
resourceContent = "";
try
{
br = new BufferedInputStream(aStream);
array = new byte[kBufferInitialSize];