Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南

自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理

package cc.testio;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.widget.ImageView;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.URL;/** * * IO流小结: * * 1 InputStream和OutputStream中出和入的方向都是相对于内存而言的. * 读进内存的采用InputStream,写出内存的采用OutputStream * * 2 在使用IO流时请注意区分采用字节流还是字符流 * 比如对于图片的读取就不能采用字符流 * * 3 原来的几篇和IO相关的博文,现已Deprecated * http://blog.csdn.net/lfdfhl/article/details/8195216 * http://blog.csdn.net/lfdfhl/article/details/8195214 * http://blog.csdn.net/lfdfhl/article/details/8195422 * http://blog.csdn.net/lfdfhl/article/details/8195375 * http://blog.csdn.net/lfdfhl/article/details/12174041 * * * 原创作者 * 谷哥的小弟 * * 博客地址 * http://blog.csdn.net/lfdfhl * */public class MainActivity extends AppCompatActivity {    private ImageView mImageView;    private DownLoaderAsyncTask mAsyncTask;    private String SDCardDir;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        SDCardDir= Environment.getExternalStorageDirectory()+ File.separator;        mImageView = (ImageView) findViewById(R.id.imageView);        test1();        //test2();        //test3();        //test4();    }    /** * * 利用IO流拷贝文本文件 * * 原创作者 * 谷哥的小弟 * * 博客地址 * http://blog.csdn.net/lfdfhl */    private void test1() {        // 字节输入流        FileInputStream fileInputStream = null;        // 字符输入流        InputStreamReader inputStreamReader = null;        // 带缓冲的字符输入流        BufferedReader bufferedReader = null;        // 字节输出流        FileOutputStream fileOutputStream = null;        // 字符输出流        OutputStreamWriter outputStreamWriter = null;        // 带缓冲的字符输出流        BufferedWriter bufferedWriter = null;        try {            fileInputStream = new FileInputStream(SDCardDir + "test.txt");            //原文件的编码格式为GBK,故在此按该编码方式读取字符避免乱码            inputStreamReader = new InputStreamReader(fileInputStream,"GBK");            bufferedReader = new BufferedReader(inputStreamReader);            fileOutputStream = new FileOutputStream(SDCardDir + "eeee.txt");            outputStreamWriter = new OutputStreamWriter(fileOutputStream);            bufferedWriter = new BufferedWriter(outputStreamWriter);            String line = null;            while ((line = bufferedReader.readLine()) != null) {                bufferedWriter.write(line);                bufferedWriter.newLine();                bufferedWriter.flush();            }        } catch (Exception e) {        } finally {            if (null != bufferedWriter) {                try {                    bufferedWriter.close();                } catch (IOException e) {                }            }            if (null != bufferedReader) {                try {                    bufferedReader.close();                } catch (IOException e) {                }            }        }    }    /** * * 利用IO流拷贝本地图片 * * 原创作者 * 谷哥的小弟 * * 博客地址 * http://blog.csdn.net/lfdfhl */    private void test2() {        FileInputStream fileInputStream = null;        FileOutputStream fileOutputStream = null;        try {            fileInputStream = new FileInputStream(SDCardDir + "beauty.jpg");            fileOutputStream = new FileOutputStream(SDCardDir + "yyyy.jpg");            int len = 0;            byte buffer[] = new byte[1024 * 2];            while ((len = fileInputStream.read(buffer)) != -1) {                fileOutputStream.write(buffer, 0, len);                fileOutputStream.flush();            }        } catch (Exception e) {        } finally {            try {                if (null != fileInputStream) {                    fileInputStream.close();                }                if (null != fileOutputStream) {                    fileOutputStream.close();                }            } catch (Exception e) {            }        }    }    /** * * 利用IO流加载本地图片 * * 在得到FileInputStream之后可以调用系统API获取Bitmap: * Bitmap bitmap=BitmapFactory.decodeStream(fileInputStream); * 当然,在此我们不采用该方法而是自己用IO流来读取Bitmap。 * * 嗯哼,继续说这个例子. * 在此请注意对于buffer的大小指定 * byte [] buffer=new byte[fileInputStream.available()]; * 具体大小为fileInputStream.available(). * 请注意文档的描述: * public int available() throws IOException * 返回可以不受阻塞地从此文件输入流中读取的字节数。 * 在该示例中图片保存于本地,故可不受阻塞地读取该文件 * 所以可通过fileInputStream.available()获取到文件的大小 * * 在为buffer设置完大小后再将数据读入到buffer中 * fileInputStream.read(buffer); * 再解析得到Bitmap * Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.length); * * 原创作者 * 谷哥的小弟 * * 博客地址 * http://blog.csdn.net/lfdfhl */    private void test3(){        FileInputStream fileInputStream=null;        try {            fileInputStream=new FileInputStream(SDCardDir+"beauty.jpg");            byte [] buffer=new byte[fileInputStream.available()];            fileInputStream.read(buffer);            Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);            mImageView.setImageBitmap(bitmap);        }catch (Exception e){        }finally {            try {                if (null != fileInputStream) {                    fileInputStream.close();                }            } catch (Exception e) {            }        }    }    /** * * 利用IO流加载网络图片 * * 在该示例中图片不再在本地而是在远程。 * 在这种情况下可能发生网络阻塞,企图利用 * inputStream.available()获取图片的大小是错误的; * 此时,利用该方法获取到的值远小于图片大小。 * * 那么该怎么做呢? * 可以这样: * while ((len = inputStream.read(buffer)) != -1) { * byteArrayOutputStream.write(buffer, 0, len); * } * 1 利用inputStream将数据不断地读入到buffer中,即: * while ((len = inputStream.read(buffer)) != -1) * 2 将buffer中的数据写入到ByteArrayOutputStream中,即: * byteArrayOutputStream.write(buffer, 0, len); * 3 读取完数据后将ByteArrayOutputStream中的全部字节数据保存到字节数组中 * byte[] imageData = byteArrayOutputStream.toByteArray(); * 4 解析生成Bitmap * Bitmap bitmap = BitmapFactory.decodeByteArray(imageData,0,imageData.length); * * 此示例中ByteArrayOutputStream充当了"中转站"的作用。 * 我们不能一次性从inputStream中获取到所有的数据,所以就通过 * 多次读取来获得所有的数据;每次读取后就将数据暂存于ByteArrayOutputStream. * 当完成多次读取后再将全部数据从ByteArrayOutputStream中取出 * * 原创作者 * 谷哥的小弟 * * 博客地址 * http://blog.csdn.net/lfdfhl */    private void test4(){        mAsyncTask = new DownLoaderAsyncTask();        mAsyncTask.execute("http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg");    }    private class DownLoaderAsyncTask extends AsyncTask<String, Integer, Bitmap> {        @Override        protected void onPreExecute() {            super.onPreExecute();        }        @Override        protected Bitmap doInBackground(String... params) {            InputStream inputStream = null;            ByteArrayOutputStream byteArrayOutputStream = null;            try {                URL imageUrl = new URL(params[0]);                HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();                connection.setConnectTimeout(5000);                connection.setRequestMethod("GET");                if (connection.getResponseCode() == 200) {                    inputStream = connection.getInputStream();                    byteArrayOutputStream = new ByteArrayOutputStream();                    byte[] buffer = new byte[ 1024 ];                    int len;                    while ((len = inputStream.read(buffer)) != -1) {                        byteArrayOutputStream.write(buffer, 0, len);                    }                    byte[] imageData = byteArrayOutputStream.toByteArray();                    Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);                    return bitmap;                }            } catch (Exception e) {            } finally {                try {                    if (null != inputStream) {                        inputStream.close();                    }                    if (null != byteArrayOutputStream) {                        byteArrayOutputStream.close();                    }                } catch (Exception e) {                }            }            return null;        }        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            if (null != bitmap) {                mImageView.setImageBitmap(bitmap);            }        }    }}

更多相关文章

  1. android读取sqlite数据库的数据并用listview显示
  2. Android性能优化系列---管理你的app内存(二)
  3. Android(安卓)文件读写操作方法总结
  4. Android总结篇系列:Android广播机制----学习
  5. Android2.2 API 中文文档系列(9) ―― ZoomButton
  6. 关于android读取用户号码,手机串号,SIM卡序列号
  7. Android设计模式系列-单例模式
  8. android 敏捷开发系列(一)——《啥是敏捷开发》
  9. Pycharm安装PyQt5的详细教程

随机推荐

  1. ubuntu10.10下编译android内核源码
  2. android客户端程序访问服务器端webservic
  3. Android(安卓)Studio 1.5 opencv开发
  4. First day of android study
  5. Android(安卓)View和ViewGroup的关系
  6. Android构建工具Gradle知识1
  7. android 系统级 bug audio latency
  8. Android(安卓)Java执行Shell命令
  9. android 界面布局 很好的一篇总结 【转】
  10. Android(安卓)USB/MTP相关实现