একসাথে এক লাইনের পাঠ্য পড়া এবং পৃথকভাবে স্ট্রিংয়ের সাথে সংযুক্ত লাইনের সংযোজন হ'ল প্রতিটি লাইন এবং এতগুলি পদ্ধতির অনুরোধগুলির ওভারহেড নিষ্কাশন করতে উভয়ই সময় সাপেক্ষ।
আমি স্ট্রিম ডেটা ধরে রাখতে একটি শালীন আকারের বাইট অ্যারে বরাদ্দ করে আরও ভাল পারফরম্যান্স পেতে সক্ষম হয়েছি এবং যা প্রয়োজন অনুসারে বড় আকারের অ্যারের সাথে পুনরাবৃত্তভাবে প্রতিস্থাপন করা হয়েছে এবং অ্যারেটি যতটা রাখতে পারে তা পড়ার চেষ্টা করে।
কোনও কারণে, কোডটি HTTPUrlConnication দ্বারা ফেরত কোডটি যখন ইনপুটস্ট্রিম ব্যবহার করেছিল তখন অ্যান্ড্রয়েড বারবার পুরো ফাইলটি ডাউনলোড করতে ব্যর্থ হয়েছিল, তাই আমি পুরো ফাইলটি পেতে পারি বা বাতিল করতে পারি তা নিশ্চিত করতে আমাকে একটি বাফার্ডারিডার এবং হ্যান্ড-রোলড টাইমআউট প্রক্রিয়া উভয়ই ব্যবহার করতে হয়েছিল ensure ট্রান্সফার.
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();
}
}
সম্পাদনা: দেখা যাচ্ছে যে আপনার যদি সামগ্রীটি পুনরায় এনকোড করার প্রয়োজন না হয় (যেমন, আপনি সামগ্রীটি AS হিসাবে চান ) আপনার কোনও পাঠক সাবক্ল্যাস ব্যবহার করা উচিত নয়। উপযুক্ত স্ট্রিম সাবক্লাসটি কেবল ব্যবহার করুন।
অতিরিক্ত 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];