SD卡操作

(1)Environment.getExternalStorageState();// 判断SD卡是否
(2)Environment.getExternalStorageDirectory(); 获取SD卡的根目录
(3)Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 获取SD卡公开目录

//读写操作的权限

//写
//判断是否插入SD卡if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File file = Environment.getExternalStorageDirectory();Toast.makeText(MainActivity.this,file.getAbsolutePath()+"",Toast.LENGTH_SHORT).show();File file1=new File(file,"Download");File file2=new File(file1,"mars.txt");FileOutputStream fos =null;try {fos=new FileOutputStream(file2);fos.write("战神刘大瑞".getBytes());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}else {Toast.makeText(MainActivity.this,"没有安装SD卡",Toast.LENGTH_SHORT).show();}//下载if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){new MyThread().start();}else {Toast.makeText(MainActivity.this,"没有安装SD卡",Toast.LENGTH_SHORT).show();}//线程
public class MyThread extends Thread {@Overridepublic void run() {super.run();File file = Environment.getExternalStorageDirectory();File file1=new File(file,"Download");File file2=new File(file1,"mars.jpg");
//        File file2=new File(file1,"mars.mp4");//mp4格式FileOutputStream fos = null;try {fos = new FileOutputStream(file2);//                URL url=new URL("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");//mp4格式URL url=new URL("https://img04.sogoucdn.com/app/a/100520024/09cc6117a797b1e6e5f758de4b967ff6");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");urlConnection.connect();if (urlConnection.getResponseCode()==200){InputStream is = urlConnection.getInputStream();byte[] bys = new byte[1024];int len =0;while((len =is.read(bys))!=-1){fos.write(bys,0,len);}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}
}
//从sd卡读取图片if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){imageView.setImageBitmap(BitmapFactory.decodeFile("/sdcard/Download/mars.jpg"));}else {Toast.makeText(MainActivity.this,"没有安装SD卡",Toast.LENGTH_SHORT).show();}

三级缓存

//没有缓存的弊端 :费流量, 加载速度慢
//加入缓存的优点: 省流量,支持离线浏览
//读写权限

//从缓存中获取
public class CacheUtils {//获得手机的最大内存static long max =Runtime.getRuntime().maxMemory();//实例化一个内存对象static LruCache<String,Bitmap> lruCache=new LruCache<String,Bitmap>((int) (max/8)){@Overrideprotected int sizeOf(String key, Bitmap value) {//返回每张图片的大小return value.getByteCount();}};public static Bitmap getBitmap(String key){Bitmap bitmap = lruCache.get(key);return bitmap;}// 键 图片在内存中的名字//值 图片bitmap对象public static void setBitmap(String key,Bitmap bitmap){lruCache.put(key,bitmap);}
}//从SD卡中获取
public class SDUtils {// bitmap--->路径  BitmapFactory.decodeFile(文件路径)//根据路径获得Bitmap对象public static Bitmap getBitmap(String filepath){if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){Bitmap bitmap = BitmapFactory.decodeFile(filepath);return bitmap;}return null;}//从SD读取   根据路径---->Bitmap.compress()  压缩//将bitmap对象按照指定路径存储public  static void setBitmap(String filepath,Bitmap bitmap){if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){try {//参数一 图片的格式 JPG PNG  参数二 质量 0-100 参数三 输出流bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(filepath));} catch (FileNotFoundException e) {e.printStackTrace();}}}
}//从网络获取
public class NetUtils {//根据网址得到Bitmappublic static Bitmap getBitmap(String url){Bitmap bitmap =null;try {//直接获取异步返回的结果bitmap = new Myask().execute(url).get();} catch (ExecutionException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}return bitmap;}static class Myask extends AsyncTask<String,String,Bitmap>{@Overrideprotected Bitmap doInBackground(String... strings) {try {URL url=new URL(strings[0]);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");urlConnection.connect();if (urlConnection.getResponseCode()==200){InputStream inputStream = urlConnection.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);return bitmap;}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}}
}
//主类
public class MainActivity extends AppCompatActivity {Button button;ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=findViewById(R.id.btn);imageView=findViewById(R.id.iv);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Bitmap bitmap = CacheUtils.getBitmap("liurui");if (bitmap==null){bitmap = SDUtils.getBitmap("/sdcard/Pictures/liurui.jpg");if (bitmap==null){bitmap = NetUtils.getBitmap("https://img01.sogoucdn.com/app/a/100520024/b555532f376c51331f44c4d2c13a934c");if (bitmap==null){Toast.makeText(MainActivity.this,"你个死鬼,你让我上哪找图片去",Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this,"从网络中获取的",Toast.LENGTH_SHORT).show();imageView.setImageBitmap(bitmap);SDUtils.setBitmap("/sdcard/Pictures/liurui.jpg",bitmap);CacheUtils.setBitmap("liurui",bitmap);}}else {Toast.makeText(MainActivity.this,"从SD卡中获取的",Toast.LENGTH_SHORT).show();imageView.setImageBitmap(bitmap);CacheUtils.setBitmap("liurui",bitmap);}}else {Toast.makeText(MainActivity.this,"从内存中获取的",Toast.LENGTH_SHORT).show();imageView.setImageBitmap(bitmap);}}});}
}

二级采样

//Bitmap.compress(CompressFormat format, int quality, OutputStream stream)
Bitmap被压缩成的图片格式
压缩的质量控制,范围0~100
输出流

//主类
public class MainActivity extends AppCompatActivity {GridView gridView;ArrayList<String> arrayList=new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gridView=findViewById(R.id.gri);for (int i = 0; i < 9; i++) {arrayList.add("/sdcard/Download/mars.jpg");}Myad myad=new Myad(MainActivity.this);myad.notifyDataSetChanged();gridView.setAdapter(myad);}
}
// 适配器类
public class Myad extends BaseAdapter {MainActivity activity;public Myad(MainActivity activity) {this.activity = activity;}@Overridepublic int getCount() {return activity.arrayList.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewh;if (convertView==null){viewh=new ViewHolder();convertView=View.inflate(activity,R.layout.item_layout,null);viewh.imageView=convertView.findViewById(R.id.iv);convertView.setTag(viewh);}else {viewh = (ViewHolder)convertView.getTag();}String s = activity.arrayList.get(position);BitmapFactory.Options options=new BitmapFactory.Options();options.inJustDecodeBounds=true;int outWidth = options.outWidth;int outHeight = options.outHeight;int size = 1;while(outWidth/size>200||outHeight/size>200){size=size*2;}options.inJustDecodeBounds=false;options.inSampleSize=size;Bitmap bitmap = BitmapFactory.decodeFile(s, options);viewh.imageView.setImageBitmap(bitmap);return convertView;}class ViewHolder{ImageView imageView;}
}
//按钮一按照100%质量压缩到SD卡中,按钮二按照50%质量压缩到SD卡
//主类
public class MainActivity extends AppCompatActivity {Button button1,button2;ImageView imageView1,imageView2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1=findViewById(R.id.btn1);button2=findViewById(R.id.btn2);imageView1=findViewById(R.id.iv1);imageView2=findViewById(R.id.iv2);//https://img03.sogoucdn.com/app/a/100520024/f9237f51fa52b174dab2fb1601820a85button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {File f = Environment.getExternalStorageDirectory();File file=new File(f,"Pictures");File file1=new File(file,"mars1.jpg");Bitmap bitmap = NetUtils.getBitmap("https://img03.sogoucdn.com/app/a/100520024/f9237f51fa52b174dab2fb1601820a85");try {//参数一 图片的格式 参数二 图片质量 0-100  参数三:输出流bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file1));} catch (FileNotFoundException e) {e.printStackTrace();}Bitmap bitmap1 = SDUtils.getBitmap("/sdcard/Pictures/mars1.jpg");imageView1.setImageBitmap(bitmap1);}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {File f = Environment.getExternalStorageDirectory();File file=new File(f,"Pictures");File file1=new File(file,"mars2.jpg");Bitmap bitmap = NetUtils.getBitmap("https://img03.sogoucdn.com/app/a/100520024/f9237f51fa52b174dab2fb1601820a85");try {//参数一 图片的格式 参数二 图片质量 0-100  参数三:输出流bitmap.compress(Bitmap.CompressFormat.JPEG,50,new FileOutputStream(file1));} catch (FileNotFoundException e) {e.printStackTrace();}Bitmap bitmap2 = SDUtils.getBitmap("/sdcard/Pictures/mars2.jpg");imageView2.setImageBitmap(bitmap2);}});}
}
//sd卡工具类
public class SDUtils {// bitmap--->路径  BitmapFactory.decodeFile(文件路径)//根据路径获得Bitmap对象public static Bitmap getBitmap(String filepath){if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){Bitmap bitmap = BitmapFactory.decodeFile(filepath);return bitmap;}return null;}//从SD读取   根据路径---->Bitmap.compress()  压缩//将bitmap对象按照指定路径存储public  static void setBitmap(String filepath,Bitmap bitmap){if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){try {//参数一 图片的格式 JPG PNG  参数二 质量 0-100 参数三 输出流bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(filepath));} catch (FileNotFoundException e) {e.printStackTrace();}}}
}
//网络工具类
public class NetUtils {//根据网址得到Bitmappublic static Bitmap getBitmap(String url){Bitmap bitmap =null;try {//直接获取异步返回的结果bitmap = new Myask().execute(url).get();} catch (ExecutionException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}return bitmap;}static class Myask extends AsyncTask<String,String,Bitmap>{@Overrideprotected Bitmap doInBackground(String... strings) {try {URL url=new URL(strings[0]);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");urlConnection.connect();if (urlConnection.getResponseCode()==200){InputStream inputStream = urlConnection.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);return bitmap;}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}}
}

day06三级缓存 二次采样相关推荐

  1. Spring——三级缓存解决循环依赖详解

    三级缓存解决循环依赖详解 一.什么是三级缓存 二.三级缓存详解 Bean实例化前 属性赋值/注入前 初始化后 总结 三.怎么解决的循环依赖 四.不用三级缓存不行吗 五.总结 一.什么是三级缓存 就是在 ...

  2. CPU的一、二、三级缓存

    在Java并发编程中,我们经常会遇到共享变量的读写问题,关于这类问题我们经常会说到原子性.可见性.有序性这三大特性,再进一步会了解到总线和CPU的一.二.三级缓存.关于这三个级别的缓存网上文章介绍比较 ...

  3. 二次采样设置的四种彩色模式RGB565,ARGB8888,ARGB4444,ALPHA_8

    在上一篇博客三级缓存和二次采样的使用中我们提到了四张彩色模式,下面我就给大家介绍一下 在介绍之前我们小了解一下Android中图片占用内存的几个主要的因素: 1 图片长度 2 图片宽度, 3 单位像素 ...

  4. CPU三级缓存技术解析

    CPU三级缓存技术解析 cpu存取数据 cpu存取数据大致可以认为是下图的流程(此处图比较简单) cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cac ...

  5. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  6. Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题

    前言 循环依赖:就是N个类循环(嵌套)引用. 通俗的讲就是N个Bean互相引用对方,最终形成闭环.用一副经典的图示可以表示成这样(A.B.C都代表对象,虚线代表引用关系): 注意:其实可以N=1,也就 ...

  7. android picasso 三级缓存,Android中图片的三级缓存浅析

    图片的三级缓存机制一般是指应用加载图片的时候,分别去访问内存,文件和网络而获取图片数据的一种行为.以下内容只是简单的介绍了三级缓存的思想和大致流程,还有很多细节未进行处理,如果想深入研究可以在Gith ...

  8. Mybatis缓存机制(一级缓存、二级缓存、三级缓存)

    一.含义: 缓存就是内存中的数据,常常来自对数据库查询结果的保存. 使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度. Mybatis的缓存分为一级缓存.二级缓存.三级缓存. 一级缓存: ...

  9. 解鞍卸甲——手写简易版Spring框架(终):使用三级缓存解决循环依赖问题

    什么是三级缓存 按照目前我们实现的 Spring 框架,是可以满足一个基本需求的,但如果你配置了A.B两个Bean对象互相依赖,那么立马会抛出 java.lang.StackOverflowError ...

最新文章

  1. jQuery中的插件机制
  2. Aspose.Cells设置单元格格式
  3. Opencv卷积滤波cvFilter2D-高通与低通
  4. 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )
  5. elixir 规格_Elixir:一种高画质的编程语言
  6. python高效编程15个利器_15个Python库,让你学习编程更轻松!
  7. (29)FPGA原语设计(差分时钟转单端时钟)
  8. Java 7中的TransferQueue
  9. Centos6.x 64位 安装JDK
  10. Ubuntu下远程访问MySQL数据库
  11. java 设置sesion 生命周期
  12. AD09 PCB制作开异性窗口
  13. 2022年投影仪推荐 家用投影仪推荐一下哪款比较好2022
  14. 基于keras+VGG-16的小数据集多分类图像识别(附代码数据集)
  15. js实现60秒倒计时
  16. 【FinalIK】Full Body Biped IK
  17. 阿里天池工业蒸汽量预测baseline-数据探索篇
  18. php 如何创建一个对象,创建一个PHP对象 - BENNEE的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 第八次前端培训(JavaScript)
  20. 阿里云安装部署Oracle11g 图文流程

热门文章

  1. python 添加图片_python 图片读取、添加等
  2. 【h5移动端页面调起手机sms批量发送短信,兼容ios和android】
  3. android启动微信应用程序,android 从微信分享的网页中启动APP
  4. html中 导航条置顶的代码6,JS+CSS实现六级网站导航主菜单效果
  5. 特惠|好物推荐iPhone充电线两条装6.9元
  6. MYSQL:时间粒度(每30s、每1分钟、每5分钟、每1小时、每1周、每1月、每1季度、每1年)
  7. 如何从后面截取字符串 String.slice()
  8. 【python】字符串string的截取;获取字符串内的一串
  9. 2015自然基金一审结果:项目申请的共性问题。
  10. 电镀清洗水中提取黄金的方法?