自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(366)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android网络状态差的处理方案

难在** c **这种情况,网速很慢,却又稳定,所以在加载界面停留很久.相信大家面对这个情况处理起来是毫无压力的.相信到这里,处理起来都很容易.

2024-01-25 20:56:20 355 1

原创 理解ByteBuffer

我们通过 Java 中 NIO 包中实现的 Buffer 来给大家讲解,Buffer 总共有 7 种实现,就包含了 Java 中实现的所有数据类型。为了能让大家更直观的看出 ByteBuffer 内部的情况,我将它整理成了图的形式。可以切换到写模式之外,还有另一个方法可以切换,这就是本篇要讲的最后一个方法。首先告诉大家结论,这是符合预期的,这个时候就不应该能获取到值。可以看到的是 ,我们在 position 等于 2 的时候,调用了。,因为这个时候往里面写数据,会覆盖之前写的数据,相当于起到了。

2023-12-30 22:19:48 950

原创 需求分析师该如何开展业务建模

这样便可抽象出业务作业过程的业务实体,实体间的关系,以及业务角色。所以,业务建模在需求分析中的角色就是沟通“物理世界”和“数字世界”的“桥梁”,占据着非常重要的地位。,缺失了业务架构的业务建模,又犹如“盲人摸象”-各自有各自的理解,无全局观。用例分析描述除了描述用例的参与者,场景,流程以外,还需要有用例依赖的前置条件,约束,成功保证等其他客观因素。:虽然“领域模型”是关键交付物,但是在业务分析过程中产生的其他建模图,比如,用户旅程,业务流程图,业务实体关系图对于后面的数字化建设同样具有非常重要的意义。

2023-12-25 20:14:02 226

原创 Kotlin:内置函数let、also、with、run、apply

/ 作用1:使用it替代object对象去访问其公有的属性 & 方法it.todo()// 作用2:判断object为null的操作object?.let{//表示object不为null的条件下,才会去执行let函数体it.todo()// 注:返回值 = 最后一行 / return的表达式。

2023-12-03 16:39:24 810

原创 rtmp 协议详解

rtmp 连接从握手开始。它包含三个固定大小的块。客户端发送的三个块命名为 C0,C1,C2;服务端发送的三个块命名为S0,S1,S2。客户端通过发送 C0 和 C1 消息来启动握手过程。客户端必须接收到 S1 消息,然后发送 C2 消息。客户端必须接收到S2 消息,然后发送其他数据。服务端必须接收到 C0 或者 C1 消息,然后发送 S0 和 S1 消息。服务端必须接收到 C2 消息,然后发送其他数据。

2023-12-02 17:02:33 200

原创 解决Wireshark分析RTMP抓包时Unknown问题

其实,RTMPT设置里有一个最大包大小的设置,默认是32768,而且默认RTMPT协议配置了从多个TCP流中重组RTMPT的功能(应当是考虑基于HTTP的传输方式)。如果rtmp的chunk size大小设置的是60000,这里需要配置的更大,这里选择了1048576。使用Wireshark抓包时,经常出现很多Unknown包,但实际上的字节流实际是正常的。

2023-12-02 16:37:32 368

原创 Android studio Load error:undefined path variables

进行Sync Project with Gradle Files。android stuido 报错。

2023-12-02 10:03:22 341

原创 FLV 文件格式分析

这里需要说明一下的是,当 flv 包含的是 h264 的时候,CodecID 值是 7。FLV 文件有 9 个字节的文件头,文件以 3 字节签名 0x46、0x4C、0x 56 开始,分别是 ‘F’、’L’、’V’ 三个字母的 ascii 编码。flv tag 的 body 部分其实就是音频的 tag 部分了,图中每一个字段都有简单说明。flv 格式虽然结构简单,但是也有很多字段,每一个字段取值也有很多,这些细节需要参考具体的规范。下来以音频、视频为例,分析一下 FLV 格式的 header、tag。

2023-11-27 20:01:31 143

原创 Gradle更新失败(Error:Connection timed out: connect...)解决方法

第一个选项为使用默认的gradle wrapper:从网络下载并放到默认目录。第二个为使用本地gradle:选择下载好的到本地的目录。当我们Copy一个项目或者在不同的机器打开AndroidStudio项目时,可能会遇到这样的问题:Gradle一直在转啊转,然后报错。打开这个目录会发现一个很多英文字母的目录,再打开就可以看到该项目的Gradle包了。到下方的链接找到刚才下载失败的Gradle包,然后到刚才的目录把下载好的zip文件替换掉。文件里查看自己的Gradle包的版本,如下图我的就是。

2023-11-27 14:44:21 3909

原创 通过阿里云下载gradle

macports-distfiles-gradle安装包下载_开源镜像站-阿里云

2023-11-27 14:18:50 326

原创 kotlin中list操作实战(有注释)

【代码】kotlin中list操作实战(有注释)

2023-11-25 23:29:45 157

原创 Android 开发Java调用Kotlin提示包不存在

在kotlin代码所在module的build.gradle设置。

2023-11-23 20:53:47 320

原创 电脑序列号查询

电脑序列号是厂商给每台电脑分配的一个产品识别码,也称为主要用来查询电脑的出厂日期、保修状态、生产产地、产品配置等信息。

2023-11-23 09:07:39 322

原创 windows如何查看自己的ip地址

4.点击以太网进入网络详情页,或邮件已连接的网络,点击属性。2.进入网络和internet。3.进入网络共享中心。

2023-11-21 14:08:00 389 1

原创 Windows本地搭建rtmp推流服务

开发时偶尔需要使用rtmp直播流做视频流测试,苦于网上开源的rtmp视频流都已经失效,无奈只好尝试在本地自己搭建一个rtmp的推流服务,方便测试使用。

2023-11-21 11:10:05 1093

原创 RTMP协议和源码解析

一般来说,在拆包的时候,把一个完整的RTMP的Message消息,会拆成第一个是fmt 为 0的Chunk消息,随后的消息也会拆成fmt为3的消息,这样的做的方式就是第一个Chunk附带着最全的Chunk消息信息,后续Chunk信息的Header就会比较小,这样实现比较简单,压缩率也是比较好。RTMP最后的一个特性,就是应用层协议。RTMP协议是目前各大云厂商直线直播业务所公用的基本直播推拉流协议,随着国内直播行业的发展和5G时代的到来,对RTMP协议有基本的了解,也是我们程序员必须要掌握的基本技能。

2023-11-19 23:20:49 140

原创 快速搜索多个word、excel等文件中内容

首先我们打开“我的电脑”-->“文件夹选项”-->“搜索”标签页,在“搜索内容”下方选择:"始终搜索文件名和内容(此过程可能需要几分钟)"。然后点击“确定”,至此已经设置完毕。如何快速搜索多个word、excel等文件中内容。以win11系统为介绍对象。

2023-11-18 10:57:47 1619

原创 linux 内存查看方法:meminfo\maps\smaps\status 文件解析

linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍/proc系统下内存相关的几个文件。maps 文件可以查看某个进程的代码段、栈区、堆区、动态库、内核区对应的虚拟地址,如果你还不了解linux进程的内存空间,可以参考。maps文件只能显示简单的分区,smap文件可以显示每个分区的更详细的内存占用数据。可以看到,linux下内存占用是一个比较复杂的概念,不能。

2023-11-11 19:00:26 893

原创 数组复制之System.arraycopy

可以看到,直接就是内存块赋值的逻辑了,这样避免很多引用来回倒腾的时间,必然就变快了。这个函数之前的仍然是一堆判断,直到最后一句才是真实的拷贝语句。

2023-11-08 19:27:10 88

原创 一看就懂的java对象内存布局

Java 中一切皆对象,同时对象也是 Java 编程中接触最多的概念,深入理解 Java 对象能够更帮助我们深入地掌握 Java 技术栈。在这篇文章里,我们将从内存的视角,带你深入理解 Java 对象在虚拟机中的表现形式。我们都知道 CPU 有 32 位和 64 位的区别,这里的位数决定了 CPU 在内存中的寻址能力,32 位的指针可以表示 4G 的内存空间,而 64 位的指针可以表示一个非常大的天文数字。但是,目前市场上计算机的内存中不可能有这么大的空间,因此 64 位指针中很多高位比特其实是被浪费掉的。

2023-11-05 11:09:42 274

原创 android studio 字节码查看工具jclasslib bytecode viewer

这样就安装好了,接着去项目中,选中目标Java文件,然后 View ----- Show Bytecode with Jclasslib, 注意:需要提前编译Java文件为.class文件哟,可以Rebuild Project;其次,输入jclasslib bytecode viewer,搜索到这个插件安装好,然后apply ------ ok;可以下载软件安装使用,也可以直接在Android Studio 或者 IntelliJ IDEA中安装插件使用;还可以对.class信息进行编辑;

2023-11-04 21:08:50 643

原创 ByteBuffer的原理和使用详解

ByteBuffer是字节缓冲区,主要用户读取和缓存字节数据,多用于网络编程,原生的类,存在不好用,Netty采用自己的ByteBuff,对其进行了改进。

2023-10-31 23:51:48 226

原创 ListView中requestLayout执行流程解析

从上面可以看到最终会执行mParent的requestLayout方法,mParent是一个ViewParent类,它是一个接口,真正的requestLayout实现在它的子类,进入ViewRootImpl源码。看看内部源码,在mTraversalRunnable的run方法中,执行了doTraversal()方法,进入到doTraversal方法,我们可以看到执行了performTraversals()方法。它的父类也没有实现这个方法,最终执行的其实就是View的requestLayout方法。

2023-10-29 20:38:08 604

原创 Android View 的绘制流程之 Measure 过程详解

由于 performTraversals 方法比较长,看一个简化版:其流程具体如下: View的整个绘制流程可以分为以下三个阶段:measure: 判断是否需要重新计算 View 的大小,需要的话则计算;layout: 判断是否需要重新计算 View 的位置,需要的话则计算;draw: 判断是否需要重新绘制 View,需要的话则重绘制。在介绍绘制前,先了解下 MeasureSpec。MeasureSpec 封装了父布局传递给子布局的布局要求,它通过一个 32 位 int 类型的值来表示,该值包含了两种

2023-10-29 19:56:05 399

原创 浅析notifyDataSetChanged内部工作流程

其实这个工作在setAdapter中完成的,当为ListView设置一个Adapter的时候,就在这个Adapter中注册了一个回调监听,也就是上面说的实现一个DataSetObserver类,重写其中的onChanged回调方法,然后把这个对象添加到ArrayList当中,当Adapter调用notifyDataSetChanged的时候,就会回调onChanged函数,在onChanged里面进行ListView的更新,这样ListView就进行更新操作。

2023-10-29 15:55:35 157

原创 常用adb 命令

2、adb get-state: 获取设备的状态(设备的状态有三种:device,设备连接正常;# adb shell pm install –r /data/local/tmp/test.apk 重新安装。# adb shell screencap -p /sdcard/screen.png 截图并保存到指定位置。# adb shell pm install /data/local/tmp/test.apk 安装。

2023-10-26 09:09:01 716 1

原创 Gradle中的buildScript代码块

buildscript代码块中的repositories和dependencies的使用方式与直接在build.gradle文件中的使用方 式几乎完全一样。gradle是由groovy语言编写的,支持groovy语法,可以灵活的使用已有的各种ant插件、基于jvm的类库,而如果你的项目中需要使用该类库的话,就需要定义在buildscript代码块之外的dependencies代码块中。而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。然后才会执行剩余的build脚本。

2023-10-20 22:29:24 362

原创 如何正确复制CSDN文章到自己的博客

4.新建一个txt文件,把你粘贴的东西复制进去,然后再把文件名的后缀改为html,然后打开html文件,把里面的内容ctrl+A全部复制到你的CSDN编辑发布页面中.3.在该元素源代码上右键 “Copy”->“Copy element”2.按ctrl +f 找 "article_content"1.csdn 文章页面,按f12打开浏览器。

2023-10-20 14:26:40 1110

原创 《Android Gradle》权威指南笔记

project和task都允许用户添加额外的自定义属性,要添加额外的属性,通过应用所属对应的ext属性即可实现。添加之后可以通过ext属性对自定义属性读取和设置,如果要同时添加多个自定义属性,可以通过ext代码块。ext一般用来自定义版本号名称,把版本号和版本名单独放在一个gradle文件中,便于管理。ext {println "年龄是 ${age}"println "电话是 ${phone}"println "地址是 ${address}"年龄是 18电话是 122222。

2023-10-20 14:23:13 307

原创 Android Gradle权威指南读书笔记

Project和Task都允许用户添加额外的自定义属性,要添加额外的属性,通过ext属性即可实现。相比局部变量,自定义属性有更为广泛的作用域,你可以跨Project,跨Task访问这些自定义属性。只要你能访问这些属性所属的对象,那么这些属性都可以被访问到。//自定义一个Project的属性//通过代码块同时自定义多个属性ext {main {test {println "年龄是:${age}"println "电话是:${phone}"println "地址是:${address}"

2023-10-19 00:43:38 223

原创 git 对比两个分支差异

注意 commit 后面的箭头,根据我们在 –left-right branch1…branch2 的顺序,左箭头 < 表示是 branch1 的,右箭头 > 表示是branch2的。注意,列出来的是两个点后边(此处即branch2)多提交的内容。

2023-10-17 09:35:31 439

原创 java try 自动关闭流

首先,我们需要创建需要操作的流对象。需要注意的是,如果流对象实现了AutoCloseable接口(例如上述的流对象),那么在try-with-resources语句块中无需手动关闭流对象。在try语句块的括号中创建流对象,当try语句块执行完毕后,会自动关闭这些流对象。以上代码中,我们在try语句块中创建了FileInputStream和BufferedReader对象,并在try语句块结束后自动关闭这些对象。在try语句块中使用流对象来进行相应的操作,如读取文件内容或写入文件等。步骤三:自动关闭流对象。

2023-10-12 23:03:04 1641

原创 Java I/O 的 OutputStream 输出流相关知识点详解

每个可序列化对象的类都经过编码,包括类的类名和签名、对象的字段和数组的值,以及从初始对象引用的任何其他对象的闭包。这个类是过滤输出流的所有类的超类。这里需要注意的是,文件的写入默认使用和系统相关的字符集, 我这是中文的系统,默认情况下是 GBK 的字符集体系。PrintStream 打印的所有字符都使用给定的编码或字符集转换为字节,如果未指定,则使用平台的默认字符编码。通过设置这样的输出流,应用程序可以将字节写入底层输出流,而不必为每个写入的字节调用底层系统。一个输出流,它还维护正在写入的数据的校验和。

2023-10-12 22:56:10 1648

原创 java FileOutputStream

查看 FileInputStream 类的源代码,发现flush()是继承于其父类OutputStream的。也就是说,需要将FileOutputStream作为BufferedOutputStream构造函数的参数传入,然后对BufferedOutputStream进行写入操作,才能利用缓冲及flush()。------------| FileOutputStream 向文件输出数据的输出字节流。--------| OutputStream 抽象类,所有输出字节字节流的父类。

2023-10-12 22:38:41 324

原创 关于android:Retrofit-@Body参数不能与表单或多部分编码一起使用

在代码中设置setType(MultipartBody.FORM)删除@Multipart批注。

2023-10-11 11:54:32 94

原创 用 HTTP 提交数据,基本就这 5 种方式

通过 & 分隔的 form-urlencoded 的方式需要对内容做 url encode,如果传递大量的数据,比如上传文件的时候就不是很合适了,因为文件 encode 一遍的话太慢了,这时候就可以用 form-data。其实这种设计也很容易理解,get 是把数据拼成 query 字符串放在 url 后面,于是设计表单的 post 提交方式的时候就直接用相同的方式把数据放在了 body 里。json 是现在最常用的传递数据的方式,既不需要 url encoded,又不需要加没必要的 boundary。

2023-10-09 23:09:21 1201

原创 Git配置SSH

Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。(4)生成公钥、秘钥(填自己的邮箱,执行后需要按几次 enter 直到结束)(3)登录GitLab,将第(2)生成的公钥添加ssh。1.查看是否已经有了ssh公钥:cd ~/.ssh。如果没有则不会有此文件夹,有则删除。(3)配置用户邮箱(填自己的邮箱)(2)复制公钥文件内容,公钥文件名。(2)配置用户名(填自己的姓名)(1)打开 git 命令窗口。(1)打开生成公钥的文件夹。(5)配置 ssh 变量。

2023-09-16 11:05:15 325

原创 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 解决方案

HTTP 413 curl 22 The requested URL returned error: 413 解决方案。

2023-09-16 11:01:43 962

原创 一文讲透java弱引用以及使用场景

这是一个受会受到GC的特别关注的状态,当GC察觉到引用的可达性变化为“合适”的状态之后,reference实例的状态将变化为Pending或Inactive,到底转化为Pending状态还是Inactive状态取决于此Reference对象创建时是否注册了queue.如果注册了queue,则将添加此实例到pending-Reference list中。在垃圾回收器线程扫描它所管辖的内存区域的时,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。当实例创建的时候加入了队列后的状态。

2023-09-12 23:21:21 477 1

原创 弱引用回调引发的坑

在开发中,常常会用到回调模型,为了避免回调监听未被主动释放,导致内存泄露,我们会用到 WeakReference 来存放回调引用,然而要注意的是回调类被回收的坑。本文记录笔者开发中遇到弱引用回调被回收的坑及思考。

2023-09-12 23:17:58 155

Wireshark中的h264解析插件

Wireshark中的h264解析插件

2022-05-19

h264_extractor.lua

wireshark h264_export.lua插件--从抓包RTP导出 H.264 负载数据 mac专用

2021-08-14

Android仿数字时钟显示所需字体

Android手机LDE液晶数字时钟,电子时钟显示,添加到项目资源库,设置展示字体,可展示电子时钟效果。

2020-11-09

XML SPY 2009注册机(注册时请把网络断开,否则无法注册成功。)

Altova 希望其最新发布的XMLSpy2009会让XML代码的处理更容易,还会有助于这个产品成为最主要的XML编辑器。 Altova.XMLSpy.Enterprise.v2009 注册机下载,

2010-04-07

10天背诵英文10000单词

每天学习6个小时,脱口而出,不错的电子书

2008-10-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除