Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)
在 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(六)-CSDN博客 的基础上改进,主要是当正图加载出来后,主动删除相应的缓存中存放的缩略图,节省内存。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
implementation("io.coil-kt.coil3:coil:3.2.0")implementation("io.coil-kt.coil3:coil-gif:3.2.0")implementation("io.coil-kt.coil3:coil-core:3.2.0")implementation("io.coil-kt.coil3:coil-video:3.2.0")implementation("io.coil-kt.coil3:coil-svg:3.2.0")
import android.content.ContentUris
import android.content.Context
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil3.ImageLoader
import coil3.memory.MemoryCache
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import com.appdemo.MyImgView.Item
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launchclass MainActivity : AppCompatActivity() {companion object {const val THUMB_SIZE = 20const val IMAGE_SIZE = 350const val IMAGE = 1const val VIDEO = 2const val ROW_SIZE = 4const val TAG = "fly/MainActivity"const val PRELOAD = false}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val rv = findViewById<RecyclerView>(R.id.rv)val layoutManager = GridLayoutManager(this, ROW_SIZE)layoutManager.orientation = GridLayoutManager.VERTICALrv.layoutManager = layoutManagerval imageLoader = MyCoilManager.INSTANCE.getImageLoader(applicationContext)val adapter = MyAdapter(this, imageLoader)rv.adapter = adapterrv.layoutManager = layoutManagerrv.setItemViewCacheSize(ROW_SIZE * 10)rv.recycledViewPool.setMaxRecycledViews(0, ROW_SIZE * 10)val ctx = thislifecycleScope.launch(Dispatchers.IO) {val imgList = readAllImage(ctx)val videoList = readAllVideo(ctx)Log.d(TAG, "readAllImage size=${imgList.size}")Log.d(TAG, "readAllVideo size=${videoList.size}")val lists = arrayListOf<MyData>()lists.addAll(videoList)lists.addAll(imgList)val total = lists.sizeLog.d(TAG, "总数量=$total")lists.shuffle()lifecycleScope.launch(Dispatchers.Main) {adapter.dataChanged(lists)}if (PRELOAD) {fetchLists(imageLoader, videoList)}}}private suspend fun fetchLists(imageLoader: ImageLoader, lists: ArrayList<MyData>) {val probability = 0.65fval from = 50lists.forEachIndexed { idx, myData ->if (idx > from && (Math.random() <= probability)) {Log.d(TAG, "$idx/${lists.size} preload")preload(imageLoader, myData)delay(10)}}}private suspend fun preload(imageLoader: ImageLoader, myData: MyData) {val imageItem = Item(myData)imageItem.memory = Item.MEM_IMAGEval imageMemoryCacheKey = MemoryCache.Key(imageItem.toString())val imageMemoryCache = MyCoilManager.INSTANCE.getMemoryCache(imageMemoryCacheKey)if (imageMemoryCache == null) {val imageReq = ImageRequest.Builder(this).data(imageItem.data.path).memoryCacheKey(imageMemoryCacheKey).memoryCachePolicy(CachePolicy.WRITE_ONLY).size(IMAGE_SIZE).build()imageLoader.execute(imageReq)}}private fun readAllImage(ctx: Context): ArrayList<MyData> {val photos = ArrayList<MyData>()//读取所有图val cursor = ctx.contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null)while (cursor!!.moveToNext()) {//路径val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))val id = cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)val imageUri: Uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cursor.getLong(id))//名称//val name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))//大小//val size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE))photos.add(MyData(imageUri, path, IMAGE))}cursor.close()return photos}private fun readAllVideo(context: Context): ArrayList<MyData> {val videos = ArrayList<MyData>()//读取视频Videoval cursor = context.contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,null,null,null,null)while (cursor!!.moveToNext()) {//路径val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA))val id = cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)val videoUri: Uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cursor.getLong(id))//名称//val name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME))//大小//val size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE))videos.add(MyData(videoUri, path, VIDEO))}cursor.close()return videos}
}
import android.content.Context
import android.graphics.BitmapFactory
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import coil3.Bitmap
import coil3.ImageLoaderclass MyAdapter : RecyclerView.Adapter<MyAdapter.ImageHolder> {private var mCtx: Context? = nullprivate var mImageLoader: ImageLoader? = nullprivate var mItems = ArrayList<MyData>()private var mScreenWidth = 0private var mPlaceHolderBmp: Bitmap? = nullprivate var mThumbError: Bitmap? = nullprivate var mImageError: Bitmap? = nullcompanion object {const val TAG = "fly/ImageAdapter"}constructor(ctx: Context, il: ImageLoader?) : super() {mCtx = ctxmScreenWidth = mCtx?.resources?.displayMetrics?.widthPixels!!mImageLoader = ilmPlaceHolderBmp = BitmapFactory.decodeResource(mCtx!!.resources, R.mipmap.loading)mThumbError = BitmapFactory.decodeResource(mCtx!!.resources, android.R.drawable.ic_menu_gallery)mImageError = BitmapFactory.decodeResource(mCtx!!.resources, android.R.drawable.stat_sys_warning)}fun dataChanged(items: ArrayList<MyData>) {this.mItems = itemsnotifyDataSetChanged()}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageHolder {val view = MyImgView(mCtx!!, mImageLoader, mScreenWidth, mPlaceHolderBmp, mThumbError, mImageError)return ImageHolder(view)}override fun onBindViewHolder(holder: ImageHolder, position: Int) {holder.image.setData(mItems[position])}override fun getItemCount(): Int {return mItems.size}class ImageHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {var image = itemView as MyImgView}
}
import android.app.Application
import android.util.Log
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.SingletonImageLoaderclass MyApp : Application(), SingletonImageLoader.Factory {companion object {const val TAG = "fly/MyApp"}override fun newImageLoader(context: PlatformContext): ImageLoader {Log.d(TAG, "newImageLoader")return MyCoilManager.INSTANCE.getImageLoader(this)}
}
import android.content.Context
import android.os.Environment
import android.util.Log
import coil3.EventListener
import coil3.ImageLoader
import coil3.bitmapFactoryMaxParallelism
import coil3.decode.Decoder
import coil3.disk.DiskCache
import coil3.disk.directory
import coil3.gif.AnimatedImageDecoder
import coil3.imageDecoderEnabled
import coil3.memory.MemoryCache
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import coil3.request.Options
import coil3.svg.SvgDecoder
import coil3.video.VideoFrameDecoder
import java.io.Fileclass MyCoilManager {companion object {const val TAG = "fly/MyCoilManager"val INSTANCE by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { MyCoilManager() }}private var mImageLoader: ImageLoader? = nullprivate var memoryCacheMaxSize = 0L// BitmapFactoryDecoder// internal const val DEFAULT_MAX_PARALLELISM = 4private val MAX_PARALLELISM = 4fun getImageLoader(ctx: Context): ImageLoader {if (mImageLoader != null) {Log.w(TAG, "ImageLoader已经初始化")return mImageLoader!!}Log.d(TAG, "初始化ImageLoader")//初始化加载器。mImageLoader = ImageLoader.Builder(ctx).imageDecoderEnabled(true) // false 对于一些特殊图,可以正常解码。.memoryCachePolicy(CachePolicy.ENABLED).memoryCache(initMemoryCache()).diskCachePolicy(CachePolicy.ENABLED).diskCache(initDiskCache()).bitmapFactoryMaxParallelism(MAX_PARALLELISM).eventListener(object : EventListener() {override fun decodeStart(request: ImageRequest, decoder: Decoder, options: Options) {//Log.d(TAG, "decodeStart ${request.data}")}}).components {add(MyThumbFetcher.Factory(ctx))add(AnimatedImageDecoder.Factory())add(VideoFrameDecoder.Factory())add(SvgDecoder.Factory())}.build()Log.d(TAG, "memoryCache.maxSize=${mImageLoader!!.memoryCache?.maxSize}")return mImageLoader!!}private fun initMemoryCache(): MemoryCache {//内存缓存。val memoryCache = MemoryCache.Builder().maxSizeBytes(1024 * 1024 * 1024 * 2L) //2GB.build()memoryCacheMaxSize = memoryCache.maxSizereturn memoryCache}private fun initDiskCache(): DiskCache {//磁盘缓存。val diskCacheFolder = Environment.getExternalStorageDirectory()val diskCacheName = "coil_disk_cache"val cacheFolder = File(diskCacheFolder, diskCacheName)if (cacheFolder.exists()) {Log.d(TAG, "${cacheFolder.absolutePath} exists")} else {if (cacheFolder.mkdir()) {Log.d(TAG, "${cacheFolder.absolutePath} create OK")} else {Log.e(TAG, "${cacheFolder.absolutePath} create fail")}}val diskCache = DiskCache.Builder().maxSizeBytes(1024 * 1024 * 1024 * 2L) //2GB.directory(cacheFolder).build()Log.d(TAG, "cache folder = ${diskCache.directory.toFile().absolutePath}")return diskCache}fun getMemoryCache(key: MemoryCache.Key): MemoryCache.Value? {return mImageLoader?.memoryCache?.get(key)}fun memoryCache(): MemoryCache? {return mImageLoader?.memoryCache}fun calMemoryCache(): String {val sz = mImageLoader?.memoryCache?.sizereturn "${sz?.toFloat()!! / memoryCacheMaxSize.toFloat()},$sz/$memoryCacheMaxSize"}
}
import android.net.Uriopen class MyData {var uri: Uri? = nullvar path: String? = nullvar lastModified = 0Lvar width = 0var height = 0var position = -1var type = -1 //-1未知。1,普通图。2,视频。constructor(uri: Uri?, path: String?, type: Int = -1) {this.uri = urithis.path = paththis.type = type}override fun toString(): String {return "MyData(uri=$uri, path=$path, lastModified=$lastModified, width=$width, height=$height, position=$position, type=$type)"}
}
import android.content.Context
import android.util.Log
import androidx.appcompat.widget.AppCompatImageView
import coil3.Bitmap
import coil3.ImageLoader
import coil3.asImage
import coil3.memory.MemoryCache
import coil3.request.CachePolicy
import coil3.request.Disposable
import coil3.request.ErrorResult
import coil3.request.ImageRequest
import coil3.request.SuccessResult
import coil3.request.bitmapConfig
import coil3.toBitmap
import kotlin.math.roundToIntclass MyImgView : AppCompatImageView {companion object {const val TAG = "fly/MyImgView"}private var mCtx: Context? = nullprivate var mImageLoader: ImageLoader? = nullprivate var mScreenWidth: Int = 0private var mHeight: Int = 0private var mThumbDisposable: Disposable? = nullprivate var mImageDisposable: Disposable? = nullprivate var mPlaceHolderBmp: Bitmap? = nullprivate var mThumbError: Bitmap? = nullprivate var mImageError: Bitmap? = nullconstructor(ctx: Context,il: ImageLoader?,screenWidth: Int,placeHolderBmp: Bitmap?,thumbError: Bitmap?,imageError: Bitmap?) : super(ctx) {mCtx = ctxmImageLoader = ilmScreenWidth = screenWidthmHeight = (mScreenWidth.toFloat() / MainActivity.ROW_SIZE).roundToInt()scaleType = ScaleType.CENTER_CROPmPlaceHolderBmp = placeHolderBmpmThumbError = thumbErrormImageError = imageError}fun setData(mData: MyData) {clear()val imageItem = Item(mData)imageItem.memory = Item.MEM_IMAGEval imageMemoryCacheKey = MemoryCache.Key(imageItem.toString())val imageMemoryCache = MyCoilManager.INSTANCE.getMemoryCache(imageMemoryCacheKey)if (imageMemoryCache != null) {Log.d(TAG, "命中正图缓存 $imageItem 缓存状态=${MyCoilManager.INSTANCE.calMemoryCache()}")setImageBitmap(imageMemoryCache.image.toBitmap())} else {var highQuality = falseval thumbItem = Item(mData)thumbItem.memory = Item.MEM_THUMBval thumbMemoryCacheKey = MemoryCache.Key(thumbItem.toString())val thumbMemoryCache = MyCoilManager.INSTANCE.getMemoryCache(thumbMemoryCacheKey)if (thumbMemoryCache != null) {Log.d(TAG, "命中缩略图缓存 $thumbItem 缓存状态=${MyCoilManager.INSTANCE.calMemoryCache()}")setImageBitmap(thumbMemoryCache.image.toBitmap())} else {setImageBitmap(mPlaceHolderBmp)val thumbReq = ImageRequest.Builder(mCtx!!).data(thumbItem).bitmapConfig(android.graphics.Bitmap.Config.RGB_565).memoryCacheKey(thumbMemoryCacheKey).memoryCachePolicy(CachePolicy.WRITE_ONLY).size(MainActivity.THUMB_SIZE, MainActivity.THUMB_SIZE).listener(object : ImageRequest.Listener {override fun onSuccess(request: ImageRequest, result: SuccessResult) {Log.d(TAG, "缩略图 onSuccess $thumbItem 缓存状态=${MyCoilManager.INSTANCE.calMemoryCache()}")if (!highQuality) {setImageBitmap(result.image.toBitmap())}}override fun onError(request: ImageRequest, result: ErrorResult) {Log.e(TAG, "缩略图 onError $thumbItem")if (!highQuality) {setImageBitmap(mThumbError)MyCoilManager.INSTANCE.memoryCache()?.set(thumbMemoryCacheKey, MemoryCache.Value(mThumbError?.asImage()!!))}}}).build()mThumbDisposable = mImageLoader?.enqueue(thumbReq)}val imageReq = ImageRequest.Builder(mCtx!!).data(imageItem.data.uri).bitmapConfig(android.graphics.Bitmap.Config.ARGB_8888).memoryCacheKey(imageMemoryCacheKey).memoryCachePolicy(CachePolicy.WRITE_ONLY).size(MainActivity.IMAGE_SIZE).listener(object : ImageRequest.Listener {override fun onSuccess(request: ImageRequest, result: SuccessResult) {highQuality = truemThumbDisposable?.dispose()Log.d(TAG, "正图 onSuccess $imageItem 缓存状态=${MyCoilManager.INSTANCE.calMemoryCache()}")setImageBitmap(result.image.toBitmap())// 因为正图已经获取,缩略图不必存在// 清除缩略图缓存,节省内存。MyCoilManager.INSTANCE.memoryCache()?.remove(thumbMemoryCacheKey)}override fun onError(request: ImageRequest, result: ErrorResult) {Log.e(TAG, "正图 onError $imageItem")setImageBitmap(mImageError)//如果正式的缩略图请求失败,后续放弃重复加载(无意义的重复加载),直接写入失败的异常占位图。MyCoilManager.INSTANCE.memoryCache()?.set(imageMemoryCacheKey, MemoryCache.Value(mImageError?.asImage()!!))}}).build()mImageDisposable = mImageLoader?.enqueue(imageReq)}}override fun onDetachedFromWindow() {super.onDetachedFromWindow()//强化clear//clear()}private fun clear() {Log.d(TAG, "clear")mThumbDisposable?.dispose()mImageDisposable?.dispose()}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {super.onMeasure(widthMeasureSpec, heightMeasureSpec)setMeasuredDimension(mHeight, mHeight)}class Item(val data: MyData) {companion object {//内存中的标记const val MEM_THUMB = 0const val MEM_IMAGE = 1}var memory = -1override fun toString(): String {return "Item(data=$data, memory=$memory)"}}
}
import android.content.Context
import android.graphics.Bitmap
import android.util.Log
import android.util.Size
import coil3.ImageLoader
import coil3.asImage
import coil3.decode.DataSource
import coil3.fetch.FetchResult
import coil3.fetch.Fetcher
import coil3.fetch.ImageFetchResult
import coil3.request.Options/*** 例如 FileUriFetcher*/
class MyThumbFetcher(private val ctx: Context, private val item: MyImgView.Item, private val options: Options) : Fetcher {companion object {const val TAG = "fly/MyThumbFetcher"}override suspend fun fetch(): FetchResult {var bmp: Bitmap? = nullval t = System.currentTimeMillis()try {bmp = ctx.contentResolver.loadThumbnail(item.data.uri!!, Size(MainActivity.THUMB_SIZE, MainActivity.THUMB_SIZE), null)Log.d(TAG, "loadThumbnail time cost=${System.currentTimeMillis() - t} $item ${MyCoilManager.INSTANCE.calMemoryCache()}")} catch (e: Exception) {Log.e(TAG, "e=$e Item=$item")}return ImageFetchResult(bmp?.asImage()!!,true,dataSource = DataSource.DISK)}class Factory(private val ctx: Context) : Fetcher.Factory<MyImgView.Item> {override fun create(item: MyImgView.Item,options: Options,imageLoader: ImageLoader,): Fetcher {return MyThumbFetcher(ctx, item, options)}}
}
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(六)-CSDN博客文章浏览阅读320次,点赞4次,收藏15次。本文介绍了在Android应用中使用Coil 3.2.0版本加载缩略图和正式图的实现方法,并提供了相关的Kotlin代码示例。文章提到,尽管配置了磁盘缓存路径,但实际运行时缓存文件为空,表明磁盘缓存未生效。此外,作者建议将缩略图和正图的内存缓存合并为单一缓存系统,以优化性能。文章还列出了所需的权限声明和Coil库的依赖项,包括对GIF、视频和SVG格式的支持。更多细节可参考CSDN博客链接。https://blog.csdn.net/zhangphil/article/details/147963941
相关文章:
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七) 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(六)-CSDN博客 的基础上改进,主要是…...
快速搭建一个electron-vite项目
1. 初始化项目 在命令行中运行以下命令 npm create quick-start/electronlatest也可以通过附加命令行选项直接指定项目名称和你想要使用的模版。例如,要构建一个 Electron Vue 项目,运行: # npm 7,需要添加额外的 --: npm cre…...
Python网络请求利器:urllib库深度解析
一、urllib库概述 urllib是Python内置的HTTP请求库,无需额外安装即可使用。它由四个核心模块构成: urllib.request:发起HTTP请求的核心模块urllib.error:处理请求异常(如404、超时等)…...
2025认证杯第二阶段数学建模B题:谣言在社交网络上的传播思路+模型+代码
2025认证杯数学建模第二阶段思路模型代码,详细内容见文末名片 一、引言 在当今数字化时代,社交网络已然成为人们生活中不可或缺的一部分。信息在社交网络上的传播速度犹如闪电,瞬间就能触及大量用户。然而,这也为谣言的滋生和扩…...
IP地址、端口、TCP介绍、socket介绍、程序中socket管理
1、IP地址:IP 地址就是 标识网络中设备的一个地址,好比现实生活中的家庭地址。IP 地址的作用是 标识网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。 2、端口:代表不同的进程,如下图: 3、socket:…...
leetcode0621. 任务调度器-medium
1 题目:任务调度器 官方标定难度:中 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制…...
中小型培训机构都用什么教务管理系统?
在教育培训行业快速发展的今天,中小型培训机构面临着学员管理复杂、课程体系多样化、教学效果难以量化等挑战。一个高效的教务管理系统已成为机构运营的核心支撑。本文将深入分析当前市场上适用于中小型培训机构的教务管理系统,重点介绍爱耕云这一专业解…...
centos7 基于yolov10的推理程序环境搭建
这篇文章的前提是系统显卡驱动已经安装 安装步骤参照前一篇文章centos7安装NVIDIA显卡 安装Anaconda 下载地址anaconda.com 需要注册账号获取下载地址 wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh赋予权限 chmod ax Anaconda3-2024.10-1-…...
Web GIS可视化地图框架Leaflet、OpenLayers、Mapbox、Cesium、ArcGis for JavaScript
Mapbox、OpenLayers、Leaflet、ArcGIS for JavaScript和Cesium是五种常用的Web GIS地图框架,它们各有优缺点,适用于不同的场景。还有常见的3d库和高德地图、百度地图。 1. Mapbox 官网Mapbox Gl JS案列:https://docs.mapbox.com/mapbox-gl-…...
Kafka如何实现高性能
Kafka如何实现高性能 Kafka之所以能成为高性能消息系统的标杆,是通过多层次的架构设计和优化实现的。 一、存储层优化 1. 顺序I/O设计 日志结构存储:所有消息追加写入,避免磁盘随机写分段日志:将日志分为多个Segment文件&…...
如何通过partclone克隆Ubuntu 22系统
如何通过partclone克隆Ubuntu 22系统 一. 背景知识:为什么要克隆系统?二. 准备工作详解2.1 选择工具:为什么是partclone?2.2 制作定制化ISO的深层原因 三. 详细操作步骤3.1 环境准备阶段3.2 ISO改造关键步骤3.3 启动到Live环境3.4…...
语义化路径是什么意思,举例说明
下面的java代码输出结果是/a/b/../c/./a.txt/a/c/a.txt,语义化路径是什么意思呢?代码如下所示: import org.springframework.util.StringUtils; public class StringUtilsTest { /** 字符串处理 */ Test public void …...
Dockerfile构建镜像
Dockerfile 构建镜像 # 使用本地已下载的 java:8-alpine 镜像作为基础镜像 FROM java:8-alpine# 设置工作目录 WORKDIR /home/www/shop# 复制 JAR 文件到容器中 COPY ./fkshop-build.jar /home/www/shop/fkshop-build.jar# 复制配置文件(如果需要) COPY…...
vue3.0的name属性插件——vite-plugin-vue-setup-extend
安装 这个由于是在开发环境下的一个插件 帮助我们支持name属性 所以需要是-D npm i vite-plugin-vue-setup-extend -D在pasckjson中无法注释每个插件的用处 可以在vscode中下载一个JsonComments这样可以在json中添加注释方便日后维护和查阅API 引入 在vite.config.js中 im…...
gRPC为什么高性能
gRPC 之所以具备高性能的特性,主要得益于其底层设计中的多项关键技术优化。以下从协议、序列化、传输机制、并发模型等方面详细解析其高性能的原因: 1. 基于 HTTP/2 协议的核心优势 HTTP/2 是 gRPC 的传输基础,相较于 HTTP/1.x,它通过以下机制显著提升了效率: 多路复用(…...
进度管理高分论文
2022年,xx县开展紧密型县域医共体建设,将全县县、镇两级医疗机构组建成2家医共体,要求医共体内部实行行政、人员、财务、业务、信息、绩效、药械“七统一”管理。但是卫生系统整体信息化水平较低,业务系统互不相通,运营…...
每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h
一.定长滑动窗口 【套路】教你解决定长滑窗!适用于所有定长滑窗题目! 模版套路 1.题目描述 1.计算所有长度恰好为 k 的子串中,最多可以包含多少个元音字母 2.找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 3.…...
C++核心编程--1 内存分区模型
C程序执行时,内存可以划分为4部分 代码区:存放函数体的二进制代码 全局区:存放全局变量、静态变量、常量 栈区:局部变量、函数参数值,编译器自动分配和释放 堆区:程序员自己分配和释放 1.1 程序运行前…...
产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本发布
五月,谷云科技 iPaaS 集成平台保持月度更新, V7.5 版本于近日正式发布。我们一起来看看新版本有哪些升级和优化。 核心新增功能:深化API治理,释放连接价值 API网关:全链路可控,精准管控业务状态 业务状态…...
【AI论文】对抗性后期训练快速文本到音频生成
摘要:文本到音频系统虽然性能不断提高,但在推理时速度很慢,因此对于许多创意应用来说,它们的延迟是不切实际的。 我们提出了对抗相对对比(ARC)后训练,这是第一个不基于蒸馏的扩散/流模型的对抗加…...
欧拉计划 Project Euler 73(分数有范围计数)题解
欧拉计划 Project Euler 73 题解 题干分数有范围计数 思路code 题干 分数有范围计数 考虑形如 n d \frac{n}{d} dn的分数,其中 n n n和 d d d均为正整数。如果 n < d n<d n<d且其最大公约数为1,则称该分数为最简真分数。 将所有 d ≤ 8 d\l…...
Quic如何实现udp可靠传输
QUIC(Quick UDP Internet Connections)是由 Google 设计并被 IETF 标准化的传输层协议,它基于 UDP 实现,但提供了类似 TCP 的可靠性和更高级的功能(如多路复用、0-RTT 握手、TLS 加密等)。 尽管 UDP 是不可…...
本地文件操作 MCP (多通道处理) 使用案例
## 概述 文件操作 MCP (Multi-Channel Processing) 是一种用于高效处理本地文件的框架和库,它提供了并行处理、批量操作、监控和异常处理等功能。通过多通道架构,MCP 能够显著提高大规模文件操作的效率,特别适用于需要处理大量文件或大型文件…...
Blender 入门教程(三):骨骼绑定
一、前言 不知道大家有没有玩过一些单机游戏的 Mod,比如《侠盗猎车》里主角变成奥特曼,各种新能源汽车乱入等等。 这些都是别人对原有模型就行修改换皮,并重新绑定骨骼完成的,所以如果会了骨骼绑定后,你也就可以自己…...
Java 异常处理之 BufferOverflowException(BufferOverflowException 概述、常见发生场景、避免策略)
一、BufferOverflowException 概述 BufferOverflowException 是 Java NIO 包中的一个运行时异常,是 RuntimeException 的子类 public class BufferOverflowException extends RuntimeException {... }# 继承关系java.lang.Object-> java.lang.Throwable-> j…...
密码学实验:凯撒密码
密码学实验:凯撒密码 一、实验目的 掌握凯撒密码的数学原理:理解字符移位与模运算的结合,实现加解密算法。理解暴力破解本质:通过穷举有限密钥空间,掌握利用语言特征破解密文的方法。编程实践:用Python实…...
C40-指针
一 指针的引入 什么是指针:指针是一个变量,其值是另一个变量的内存地址 简单的使用地址输出一个变量: 代码示例 #include <stdio.h> int main() {int a10;printf("a的地址是:%p\n",&a);printf("a%d\n",*(&a)); //*号是取值运算符…...
Cloudflare防火墙拦截谷歌爬虫|导致收录失败怎么解决?
许多站长发现网站突然从谷歌搜索结果中“消失”,背后很可能是Cloudflare防火墙误拦截了谷歌爬虫(Googlebot),导致搜索引擎无法正常抓取页面。 由于Cloudflare默认的防护规则较为严格,尤其是针对高频访问的爬虫IP&…...
3.3 掌握RDD分区
本实战任务旨在掌握Spark RDD 的分区操作,包括理解 RDD 分区的概念、作用、分区数量的确定原则以及如何通过自定义分区器来优化数据处理。通过创建一个 Maven 项目并编写 Scala 代码,实现了一个自定义的科目分区器 SubjectPartitioner,该分区…...
以项目的方式学QT开发(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value :要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器,并对其进行插入、删除和迭代操作。在实际应用中&am…...
linux备份与同步工具rsync
版权声明:原创作品,请勿转载! 文章目录 版权声明:原创作品,请勿转载! 实验环境介绍: 1.工具介绍 2.详细介绍 2.1 本地模式(用得少) 2.2 远程模式 2.3 守护进程模式…...
Ascend的aclgraph(九)AclConcreteGraph:e2e执行aclgraph
1回顾 前面的几章内容探讨了aclgraph运行过程中的涉及到的关键模块和技术。本章节将前面涉及到的模块串联起来,对aclgraph形成一个端到端的了解。 先给出端到端运行的代码,如下: import torch import torch_npu import torchair import log…...
2025 OceanBase 开发者大会全议程指南
5 月 17 日,第三届 OceanBase 开发者大会将在广州举办。 我们邀请数据库领军者与AI实践先锋,与开发者一起探讨数据库与 AI 协同创新的技术趋势,面对面交流 OceanBase 在 TP、AP、KV 及 AI 能力上的最新进展,深度体验“打破技术栈…...
【深度学习之四】知识蒸馏综述提炼
知识蒸馏综述提炼 目录 知识蒸馏综述提炼 前言 参考文献 一、什么是知识蒸馏? 二、为什么要知识蒸馏? 三、一点点理论 四、知识蒸馏代码 总结 前言 知识蒸馏作为一种新兴的、通用的模型压缩和迁移学习架构,在最近几年展现出蓬勃的活力…...
Java大师成长计划之第23天:Spring生态与微服务架构之服务发现与注册中心
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4-turbo模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在微服务架构中,服务发现…...
list简单模拟实现
成员变量迭代器(重点)ListIterator运算符重载begin、end 插入、删除inserterase头插、尾插、头删、尾删 operator->const_iterator拷贝构造operator析构函数完整代码 由于前面已经模拟实现了vector,所以这里关于一些函数实现就不会讲的过于…...
undefined reference to `typeinfo for DeviceAllocator‘
出现“undefined reference to typeinfo”链接错误的原因及解决方法如下: class DeviceAllocator { public:explicit DeviceAllocator(DeviceType device_type){};virtual void* allocate(size_t n) 0;virtual void deallocate(void* p) 0;~DeviceAllocator() d…...
动态规划问题 -- 多状态模型(买股票的最佳时机II)
目录 动态规划分析问题五步曲题目概述利用状态机推导状态转移方程式代码编写 动态规划分析问题五步曲 不清楚动态规划分析问题是哪关键的五步的少年们可以移步到 链接: 动态规划算法基础 这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的 题目概述 链接: 买股票的最…...
【落羽的落羽 C++】进一步认识模板
文章目录 一、非类型模板参数二、模板的特化1. 函数模板特化2. 类模板特化 三、模板的编译分离 一、非类型模板参数 模板参数可以分为类型参数和非类型参数。我们之前使用的都是类型参数,即出现在模板参数列表中,跟在class或typename之类的参数类型名称…...
Java爬虫能处理京东商品数据吗?
Java爬虫完全可以处理京东商品数据。通过Java爬虫技术,可以高效地获取京东商品的详细信息,包括商品名称、价格、图片、描述等。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。以下是一个完整的Java爬虫示例,展…...
#跟着若城学鸿蒙# web篇-初探
前言 先看下官方介绍,这里总结了比较重要的几点Web组件基础:加载与渲染网页全面解析Web组件是现代应用开发中不可或缺的重要元素,它允许开发者在原生应用中无缝集成Web内容。本文将全面介绍Web组件的基本功能,包括多种内容加载方…...
Top-p采样:解锁语言模型的创意之门
Top - p采样 是什么:核采样:排序,累计到0.7,随机选择 在自然语言生成和大规模语言模型推理中,Top - p采样(又叫核采样,Nucleus Sampling)是一种基于累积概率的采样策略。 Top - p介…...
周赛好题推荐
这周周赛很有质量的,上了一个很有意思的数学题目,推了半天..... 给定一个区间[l,r],求出区间内所有满足x mod 2^i !k的所有正整数(最后全部进行异或) 首先我们不妨先算出[l,r]区间所有数字的异或,然后在算…...
【RabbitMQ】实现RPC通信的完整指南
文章目录 RPC 通信创建相关队列客户端代码声明队列发送请求接收响应完整代码 服务端代码设置同时只能获取一个消息接收消息完整代码 运行程序启动客户端启动服务端 RPC 通信 RPC (Remote Procedure Call), 即远过程调用。它是一种通过网络从远程计算机上请求服务,而…...
CK3588下安装linuxdeployqt qt6 arm64
参考资料: Linux —— linuxdeployqt源码编译与打包(含出错解决) linux cp指令报错:cp: -r not specified; cp: omitting directory ‘xxx‘(需要加-r递归拷贝) CMake Error at /usr/lib/x86_64…...
滑动窗口之二(优先队列)
原本滑动窗口的板子用的是数组和双指针模拟,我嫌麻烦还不好懂找了双端队列。但其实还是不太好使,比如今天的这道题就处理起来很麻烦。但是如果用优先队列的话就可以一直保证整个窗口是有序的,只需判断一下是否在窗口内即可。但是!…...
小刚说C语言刷题—1088求两个数M和N的最大公约数
1.题目描述 求两个正整数 M 和 N 的最大公约数(M,N都在长整型范围内) .输入 输入一行,包括两个正整数。 输出 输出只有一行,包括1个正整数。 样例 输入 45 60 输出 15 2.参考代码(C语言版) #include <stdio.h> …...
pytorch训练可视化工具---TensorBoard
一、目的:为什么使用 TensorBoard 调控模型 使用 TensorBoard 可以帮我们: 实时查看 loss / acc 曲线 → 判断是否过拟合、欠拟合; 对比不同模型或超参数的效果; 可视化模型结构 → 帮助调试模型设计; 查看权重/梯…...
丝杆升降机限位失灵深度剖析:从故障机理到智能监测方案
在工业自动化与精密机械传动领域,丝杆升降机凭借高精度、大推力的特性,成为产线设备的核心执行部件。然而,限位系统的可靠性直接决定设备安全运行与生产连续性。本文将从技术原理、故障诊断到智能监测方案,系统性解析丝杆升降机限…...
系统集成项目管理工程师学习笔记
第九章 项目管理概论 1、项目基本要素 项目基础 项目是为创造独特的产品、服务或成果而进行的临时性工作。 项目具有临时性、独特性、渐进明细的特点。项目的“临时性”是指项目只有明确的起点和终点。“临时性”并一定意味着项目的持续时间短。 项目可宣告结束的情况&…...