java
文章平均质量分 62
android_cai_niao
我是一名Android开发工程师,但我的技术好菜,好希望有人出一些容易看得懂的菜鸟教程。
展开
-
IntelliJ中的非JVM技术
IntelliJ的官方帮助文档上有很多好东西可以去学习。原创 2024-03-26 16:41:08 · 267 阅读 · 0 评论 -
JavaBean、POJO、Entity、ValueObject区别
JavaBean、POJO、Entity 和 ValueObject(也称为VO)是软件开发中常用的一些术语,它们在特定上下文中可能有所不同,但通常用于描述数据传输对象或模型的不同概念。原创 2024-03-06 17:08:51 · 368 阅读 · 0 评论 -
操作系统、编程语言、软件、工具出生年份
Unix 是一种多用户、多任务操作系统,最初由肯·汤普森(Ken Thompson)、丹尼斯·里奇(Dennis Ritchie)、道格拉斯·麦克罗伊(Douglas McIlroy)和乔伊·奥莱阿里(Joe Ossanna)等人在贝尔实验室(Bell Labs)开发。Unix 最早于 1969 年开始开发,最初是为了在 DEC PDP-7 上开发软件,后来逐渐发展成为一种通用的操作系统。:Linux 是一种开源的 Unix-like 操作系统内核,由 Linus Torvalds 在 1991 年创建。原创 2024-03-06 11:20:21 · 1019 阅读 · 0 评论 -
IntelliJ中读取resources目录中的文件
【代码】IntelliJ中读取resources目录中的文件原创 2024-02-20 23:51:41 · 480 阅读 · 0 评论 -
一个单词前面加上bi是什么意思
在英语中,将一个单词前面加上 “bi-” 前缀通常表示 “two”、“twice” 或 “double” 的意思。这个前缀来自于拉丁语的 “bi-”,意味着 “两个” 或 “两次”。双重或两倍:例如,“bilingual” 表示 “双语的”,“bifocal” 表示 “双焦点的”。二分或两个:例如,“bilateral” 表示 “两边的”,“binary” 表示 “二进制的”。二次的或重复的:例如,“bisect” 表示 “二等分”,“bisexual” 表示 “双性的”。则表示该接口的函数有两个参数。原创 2024-02-20 15:46:54 · 1408 阅读 · 0 评论 -
在Java泛型中的常用字母
【代码】在Java泛型中的常用字母。原创 2024-02-20 08:49:09 · 473 阅读 · 0 评论 -
为什么InputStream的read()返回-1可以表示结束
4个字节中的前面3个字节全变成0,只保留最后一个字节的值。所以如果从输入流中读取一个字节,如果这个字节的值刚好是。基础时应该都有学到,两个类型不同的数值进行计算时,低类型会转为高类型再进行计算的,所以。之后都会是一个正整数,不可能是负数,它的范围是0 ~ 255,这正好是无符号。它相当于把一个可正可负的byte值变成了一个绝对是正数的int值,所以。如上代码,把输入流中读取到的数据写到输出流中,在。,也就是输入流读取的结果,但是它在返回之前有一个。完成的,所以我们看不到实现,今天我看了。原创 2024-02-06 11:17:12 · 767 阅读 · 3 评论 -
java api文档中的since是什么意思
标签通常出现在类、方法、字段等的注释中,以提供相关元素的版本信息。这有助于开发者了解在不同的 Java 版本中引入了哪些新功能,或者哪些功能被废弃。在使用 API 时,了解版本信息可以帮助开发者确保代码的兼容性,并选择合适的 API 版本。这个标签提供了对 API 的版本控制信息,帮助开发者了解某个特定的类、方法或字段是在哪个 Java 版本中首次引入的。在官方的 Java API 文档中,你可以通过查看类、方法、字段等的详细说明来找到。在 Java API 文档中,在 Java API 文档中,原创 2024-02-06 09:04:51 · 894 阅读 · 0 评论 -
OutputSteam.nullOutputStream()和InputStream.nullInputStream()有什么用
答案来自ChatGPT。是 Java 中的一个特殊输出流对象,它被设计用于将所有写入操作都静默地丢弃,即不进行任何实际输出,也不引发异常。这个输出流通常用于一些情况下,你希望消耗输出,但实际上不需要对输出做任何处理。以下是一些使用的场景:无关紧要的输出: 当你调用某个方法或库,该方法或库生成输出,但你对这个输出不感兴趣时,你可以将输出流设置为,以忽略这些输出。测试和调试: 在某些测试场景中,你可能希望屏蔽掉不必要的输出,以保持测试结果的简洁性。将输出流设置为可以使得输出被静默地丢弃。原创 2024-02-06 09:02:24 · 595 阅读 · 0 评论 -
IntelliJ导出jar包
这样我们就拥有了一个可以直接运行的jar包了,在cmd中直接进入到该jar包目录下运行该jar包(如上图,这样就设置好一个 ‘工件’ 了,可以看到jar包名称和输出目录,这些可以根据需要去修改。现在,在项目根目录中可以看到多了一个。通过构建菜单来构建出jar包。的目录时,它自动是选择到。如上图,它会自动搜索出。创建一个Java项目。原创 2024-01-31 10:22:02 · 521 阅读 · 0 评论 -
java常量和kotlin常量
从这里也可以看出,为什么常量在编译为class字节码之后,调用它的地方已经被常量值所替换,为什么常量的声明语句还保留了,因为还是有可能会被用到的,比如我们通过反射读取该常量的值,这是需要在运行时才能完成的,无法在编译阶段就直接使用常量值替代的。常量在编译为字节码时无法使用常量值代替,因为它是一个对象,而对象的内存地址得在运行时才能确定,所以这种不应该叫常量的,所以,kotlin在这方面就做的比较好,表示一个变量不可改变用。,它不是在声明时直接赋值的,而是经过一个。中的判断得出值不是1就是2,用。原创 2024-01-30 17:42:46 · 651 阅读 · 1 评论 -
java中的输出流什么样的情况下要调用flush()函数
的频率可能会影响性能,因为它会增加实际的数据传输次数。在大多数情况下,系统会自动进行缓冲和刷新,不需要手动调用。方法用于强制将缓冲区中的数据发送到目的地,而不需要等到缓冲区满。在使用输出流时,有一些情况下可能需要调用。如果你希望在数据写入流之后立即刷新缓冲区,以确保数据被及时发送到目的地,可以调用。只有在特定需要时才手动调用,以确保数据的及时性。方法可以确保缓冲区中的数据被立即写入底层流。可以确保数据及时传送,而不必等到缓冲区满。在网络编程中,特别是使用。进行数据传输时,调用。原创 2024-01-25 10:32:02 · 636 阅读 · 0 评论 -
IntelliJIDEA快捷键中文版
官方上是英文的,我于2023-11-16下载并翻译成中文,可能翻译不太准,所以英文我都保留下来了,大家可以对比着看,有些英文太长无法再写中文的我就不写了,以保留原文的准确性。PDF一共两页,一页是Windows和Linux版本的,一页是Mac版本的,我只翻译了第一页,大家看第一页的即可。IntelliJIDEA快捷键中文版,对于Android Studio也适用。原创 2023-11-16 19:56:22 · 182 阅读 · 0 评论 -
IntelliJ中文乱码问题
运行时控制台输出的中文为乱码,解决方法:帮助 > 编辑自定义虚拟机选项…原创 2023-08-11 15:01:47 · 253 阅读 · 0 评论 -
NIO之ByteBuffer
前言ByteBuffer,顾名思义,它表示字节缓冲区。一般我们在代码中使用字节的时候一般用字节数组,即byte[],但是使byte[]的方式效率不高,而使用ByteBuffer的方式来操作数组效率是比较高的,具体描述可以查看jdk文档声明,可以查看ByteBuffer类,以及它的父类Buffer的文档声明,可以详细的了解它们的功能,它们是nio包下面的,nio就是native io,所以效率是比较高的。ByteBuffer除了效率高之外,也提供了一些比较好用的方法,比如writeInt、getInt、pu原创 2023-04-28 11:38:34 · 1044 阅读 · 0 评论 -
大意失荊州啊-java基础之多态 & 代理
当时我没太在意这个异常,就是很奇怪为什么我增加一个方法就不行,不都是同一个类中的方法吗?当时我就觉得是不是见鬼了,明明一个类上的两个方法,为什么打印的对象一个是猫一个是狗?如上图,有些函数是继承自父类的,有些则覆盖父类的,可以看到调用的。实际上是一个代理类,它没有实际的功能,实际的功能都在。如上结果,出了异常,理想的结果是输出一个。很简单,就是输出一个字符串,于是我往。类上,所以解决这个问题就很简单了,在。所以总结起来就很简单了,如上图,可以看到调用的。原创 2023-03-14 17:20:22 · 229 阅读 · 0 评论 -
Simple XML
Simple 是用于 Java 的高性能 XML 序列化和配置框架。它的目标是提供一个 XML 框架,使 XML 配置和通信系统的快速开发成为可能。该框架有助于以最少的工作量和更少的错误开发 XML 系统。它提供完整的对象序列化和反序列化,维护遇到的每个引用。从本质上讲,它类似于 Java 平台的 C# XML 序列化,但提供了用于拦截和操作的附加功能。简单的框架,强大的功能用于提供 XML 序列化的框架易于使用,并且围绕着几个注释和一个用于从 XML 读取对象和从 XML 写入对象的持久对象。原创 2023-02-20 18:01:56 · 513 阅读 · 0 评论 -
JNI官方教程
Java官方JNI教程:https://docs.oracle.com/en/java/javase/11/docs/specs/jni/functions.html原创 2021-12-10 15:39:53 · 1124 阅读 · 0 评论 -
经典打印三角形的思路
经典打印三角形的思路。原创 2022-10-17 18:07:18 · 113 阅读 · 0 评论 -
一个静态变量的空指针异常
一个静态变量的空指针异常问题。原创 2022-10-17 18:01:22 · 639 阅读 · 0 评论 -
ExceptionInInitializerError
Exception in thread "main" java.lang.ExceptionInInitializerError at com.company.Main.main(Main.java:11)Caused by: java.lang.NullPointerException at com.company.Foo.(Main.java:27) at com.company.Foo.(Main.java:19) ... 1 more原创 2022-08-08 12:01:41 · 597 阅读 · 0 评论 -
Dom4J的Bug
Dom4J Bug!原创 2022-07-26 16:10:47 · 463 阅读 · 0 评论 -
Java整点报时定时器
Java实现的类似整点报时的定时器效果。原创 2022-07-12 08:41:45 · 1413 阅读 · 0 评论 -
volatile关键字的使用
示例代码如下:public class Main { static boolean run = true; static DateFormat format = new SimpleDateFormat("HH:mm:ss.SSS"); public static void main(String[] args) throws Exception { new Thread(() -> { long start = System.cur原创 2022-04-21 09:03:30 · 604 阅读 · 0 评论 -
java代码实现二元一次方程
前言最近和朋友打羽毛球,6个人参加了羽毛球活动,打完了要计算平均每个人的费用,如果每次都用纸和笔来算就会比较麻烦,所以我就写了一个Android的程序来实现自动计算的功能。用纸和笔计算二元一次方程举行一次羽毛球活动,有4个男生和2个女生参加。费用由场地费和球费组成,场地费是150元,球费是30元,总共费用是180元,费用AA,出于对女生的关爱,女生优惠5元,也就是女生的平均费用比男生少5元,求男生平均费用是多少,女生平均费用是多少。这道题,通过二元一次方程可轻松解决,这是初中的数学知识,假设男生的平原创 2022-03-28 17:25:51 · 2798 阅读 · 0 评论 -
最通俗易懂:负数的二进制为什么要用补码的形式
负数的二进制使用码补的形式,即:原码的二进制取反加1。我们假设使用byte类型,则数据只有8个比特位,负6的二进制形式分3步形成,如下:取反就是把0变成1,把1变成0。所以负6的二进制形式为:1111 1010有时候我就在想,为什么负数的二进制形式要这么麻烦,比如负6,不能像下面这样子表示吗:如上图,最高位的1表示负数,低7位的000 0110表示6,合起来就是负6,这样不是更简单更容易理解吗?后来,我不经意间发现了一个规律,才明白了负数的二进制形式为什么要用补码的形式。我们知道1个字节是原创 2021-12-29 14:13:50 · 6034 阅读 · 14 评论 -
Java相关知识官方链接
Java相关知识官方链接,权威!学技术就要去官网!!原创 2021-12-13 11:22:03 · 117 阅读 · 0 评论 -
RandomAccessFile的效率问题,以及多线程断点续传下载要不要使用rws模式
文件复制操作,我们先使用普通的FileInputStream和FileOutputStream来完成,代码如下:val start = System.currentTimeMillis()FileInputStream("D:\\hello.mp4").use { input -> FileOutputStream("D:\\hello_copy.mp4").use { output -> val buf = ByteArray(8192) var l原创 2021-11-29 17:58:40 · 1659 阅读 · 0 评论 -
通过NIO分割文件和合并文件和计算文件md5
NIO就是香啊,不但效率高,而且写起来代码也少,示例如下:object FileUtil { fun getFileMd5(file: File): String { // 获取md5签名 val md5Bytes = FileInputStream(file).channel.use { channel -> val byteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,原创 2021-11-25 11:49:26 · 960 阅读 · 0 评论 -
BigInteger的使用以及获取文件的md5
前言JDK文档中对BigInteger的描述:不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。按字面理解,BigInteger是一个大整数,有多大呢?可以无穷大!int类型是4个字节,所以int的范围是有限的,而BigInteger能表示的整数范围是无限的。今天在看到同事发的一个获取文件md5的工具类,发现代码中使用BigInteger来把一个字节数组转换为16进制,看着很爽,所以这里也记录一下:fun getFileMd5(f原创 2021-11-24 22:14:00 · 640 阅读 · 0 评论 -
二进制、16进制、大端小端
16进制的使用在开发过程中,写文件是常有的事,如果写的内容是文本,随便用一个记事本软件打开即可查看内容是否正确,如果写的是音频文件,就要用音频软件来查看,如果是视频文件,就要用视频软件来查看。。。对应的文件就要用对应的软件来查看,但是做为开发,要时候是要查看文件的二进制的,比如我们写一个音频转换器的时候,发现转换后的音频无法播放,就需要查看此音频文件的二进制,以分析是哪里的数据出了问题,而看二进制时,看0101010100111这种看定是很少人这么干的,因为我们看二进制主要是看这个二进对应的值是多少,它的原创 2021-11-19 16:39:43 · 3857 阅读 · 0 评论 -
Java和Kotlin中的过时注解
先上结果:Java:@SuppressWarnings("deprecation")Kotlin:@Suppress("deprecation")在最新版本的IntelliJ或者AndroidStudio中,调用一个过时的函数时会有删除线,而且编译的时候也会出现警告信息,但是有时候我们知道它是过时的,而且我们需要使用这个过时的函数,这时候就想去除这个删除线和警告,但是IDE竟然把添加忽略过时的功能给去除了,真是搞不懂为什么要去掉这个功能,以前写代码都是通过IDE功能生成的,现在没有这个功能了,原创 2021-11-12 16:06:24 · 3116 阅读 · 0 评论 -
bmp格式说明
bmp24位位图格式创建bmp24位位图格式的图片打开Windows系统自带的画面软件,如下:点击“文件 > 另存为”,在弹出的界面中有4种bmp格式可以选择,如下:不知道bmp格式是不是只有上面的4种,还是有更多,我也懒得了解,这里我们只了解“24位位图”的bmp格式,因为这个格式比较简单,所以,在保存图片的时候要选择24位位图的bmp格式,不要选错了。bmp24位位图格式说明重新调整大小,如下:如上图,点击“重新调整大小”,然后在出现的界面中设置大小为2 x 3,这样的话我们的原创 2021-10-18 20:33:05 · 3603 阅读 · 0 评论 -
读写基本数据类型
把基本数据类型保存到文件中,再读取出来。为了简化操作我这里我使用内存流,如下:val number = -1val baos = ByteArrayOutputStream()val dos = DataOutputStream(baos)dos.writeInt(number)val littleEndianBytes = baos.toByteArray()val bais = ByteArrayInputStream(littleEndianBytes)val dis = DataInp原创 2021-10-18 19:56:55 · 171 阅读 · 0 评论 -
Spring Boot MySQL入门以及Spring Boot对Kotlin支持的一些Bug
Bug重现本人是做Android开发的,不做后端。目前公司有一个应用,功能界面都做了,但是请求接口还没做好,这时我就想自己做个接口,简单做个接口就行了,当然,市面上有那种可以模拟出后台接口的网站,但是我想自己写会比较好一点,比较灵活。跟公司同事了解到,现在Java搞接口已经不用Servlet了,使用Spring Boot,于是请教了他Spring Boot的使用,确实很简单,不需要学什么东西,真的是看一眼就会了。因为我在Android上已经习惯了Kotlin开发,看到Spring Boot也是支持Andr原创 2021-09-18 10:37:46 · 498 阅读 · 0 评论 -
计算两个时间之间的持续时间
需求是这样的,公司一个项目出了问题,是一个即时通讯App,为了保持在线状态,App会每15秒向服务器发送心跳包,服务器上,过期时间为30秒,即30秒内如果没收到心跳包,即会把该用户设置为离线状态。问题是有时候发现视频通话还在,但是在线状态已经是离线状态了,这时就打印了App收和发的所有消息,就发现有时发完心跳包之后,半个多小时没有发的消息,也没有收的消息。有时候日志太多了,就希望快速定位到这种突然隔了很久没有收发消息的日志,因为在发送消息和收消息的日志中,都会以时间开头写到日志中,所以就可以通过写程序读取这原创 2021-09-07 15:02:48 · 878 阅读 · 0 评论 -
计算二维数组的所有组合
前些天写了一篇《一道有趣的Java编程题》,后来发现我的解题方式只适合于通过正确答案一定有错误答案的题,如果通过正确答案找不到对应错误答案的话,就解不出来了。通过和同事交流,知道了可以使用暴力破解,这个说起来好像很简单,但是写起来还是挺难的,难点就在于如何把所有的答案组合统计起来,示例如下:A 1 2B 3 4C 5 6假设有A、B、C三组答案,每一组是两个答案,每组有且仅有一个答案正确,则答案组合的数量有8组(2的3次幂),所有答案组合如下:1、3、51、3、61、4、51、4、原创 2021-04-20 19:22:08 · 599 阅读 · 0 评论 -
一道有趣的Java编程题
在逛论坛的时候,发现一道有趣的Java编程题,感觉挺不错的,这里也记录一下我的解题思路。原题为:java书上选择结构章节后,有一个课后习题,题目描述是下面这样的:论坛连接在此:https://bbs.csdn.net/topics/399167836?page=1#post-414296327添加链接描述仔细一审题,人家是在学java书的选择结构呢,就是说java还没入门呢,所以这道题对于他来说肯定是很难的,即使对我这样的老手来说,也是花了好一些时间完成的,因为这道题有细节,细节上容易出错,如果审原创 2021-04-17 01:37:11 · 387 阅读 · 0 评论 -
文件最后修改时间
据说,在Linux系统中,文件是没有创建时间属性的,只有最后修改时间,在File对象的jdk文档确实只有获取最后修改时间的函数,没有创建时间的函数,如下:long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。示例如下:fun main() { val file = File("D:/text.txt") val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val getCurre原创 2021-04-14 15:08:59 · 1638 阅读 · 0 评论 -
gson转义html字符
static class Hello { public String name = "="; } public static void main(String[] args) throws IOException { Gson gson = new Gson(); String json = gson.toJson(new Hello()); System.out.println(json); }输...原创 2021-04-01 17:14:14 · 919 阅读 · 0 评论