您的位置:首页 > 其它

异步读取raw文件下大文件的内容

2017-04-10 18:49 351 查看
AsyncTask,异步处理,主要用于将比较耗时的操作从主线程(UI线程)中分离出来处理,提高运行速度(流畅度)。本来是要学习AsyncTask的,当看到耗时操作时就考虑到了读取大文件操作,然后自己试着读取raw文件夹下面的文件。

有两种方式读取,一种是按行读取,一种是按大小读取;

主要代码如下:

一:按行读取

关键代码:

class FileReadTask extends AsyncTask<String, String, String> {
String line_str;
String result;
Context context;

FileReadTask(Context context) {
this.context = context;
}
int i = 0;
@Override
protected String doInBackground(String... params) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
context.getResources().openRawResource(R.raw.test2)));
try {
while ((line_str = reader.readLine()) != null
&& !(line_str = reader.readLine()).equals("")) {
result += line_str;
System.out.println("line_str:"+line_str);
publishProgress(line_str);
}
System.out.println("result:"+result);
} catch (IOException e) {
e.printStackTrace();
}
return line_str;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

}

@Override
protected void onPreExecute() {
super.onPreExecute();

}

@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values[0]);
System.out.println("values:" + values[0]);
array.add(values[0]);
adapter.notifyDataSetChanged();
}

}


二:按大小读取

关键代码:

InputStream input = context.getResources().openRawResource(R.raw.test2);
String result = null;
int i;
byte[] by = new byte[128];//每次读取大小
try {
while((i = input.read(by))>0){
byte[] bys = new byte[i];
input.read(bys,0,i);
String s = new String(bys);
result +=s;
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: