Java语言特性和标准库
文章平均质量分 60
Peter(阿斯拉达)
关注系统界面开发技术,安全,语言特性,网络,图形,AI,硬件,并发,研发流程管理.
展开
-
[Java]_[初级]_[使用正则高效替换字符串的多个占位符为多个值]
场景在开发基于模板内容的Java程序时, 比如一个邮件内容模板,在内容里放置一些占位符$email,$name等来作为替换实际内容的符号。那么这时候如何做才可以少生成不必要的String字符串,从而减少内存占用达到一次过替换完的目的呢?说明作为不可变字符串String,使用它的replace方法替换会生成新的字符串,这个String很明显不合适的,所以得使用可变字符串。可变字符串使用StringBuilder或者StringBuffer都可以.并且他们都有一个replace(start,原创 2021-10-21 14:44:00 · 1012 阅读 · 0 评论 -
[Java]_[初级]_[使用SAX流的方式写入XML文件]
1. 文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入`XML`文件,还是和读`XML`文件一样,不需要生成`DOM`模型能节省不少的内存和指令。原创 2023-09-03 18:55:07 · 451 阅读 · 0 评论 -
[Java]_[初级]_[以SAX流的方式高效读取XML大文件]
作为网站的站点地图,提供了固定的格式化数据, 也方便了搜索引擎进行索引。 因此对的读写功能是比较重要的。那么如何实现大数据量的读写才可以节省内存和减少指令的执行?说明和一样,对读用流的方式,可以减少中间的模型的生成,也不需要读取整个文件到内存。这样的不需要借助第三方库,标准库里就有。流式读取使用模型的方式,从开头按起始标签和结束标签的方式进行读取数据。并需要实现自己的来处理需要的元素。这个就是模板类,它的相关方法会在识别到特定的对象是调用,比如属性,起始结束元素,元素值等。例子以原创 2023-09-03 11:24:17 · 920 阅读 · 0 评论 -
[Java]_[初级]_[如何调用外部命令获取输出并设置它的超时退出]
场景在开发Java程序的时候,有时候需要执行外部命令以获取特定信息,但是外部命令执行可能由于某些原因(比如CPU,内存占用高后延迟执行)比正常执行的时间要长,有时候甚至挂起阻塞了Java线程的执行。那么我们如何使用标准库来完成调用外部命令的超时时间设置?还有基本的问题,如何读取启动进程的输出?说明Java使用ProcessBuilder来创建外部命令的进程,并使用方法command来异步执行外部命令.ProcessBuilder ps = new ProcessBuilder();原创 2021-10-27 10:32:35 · 502 阅读 · 0 评论 -
[Java]_[初级]_[使用PropertyChangeSupport和VetoableChangeSupport来实现观察者模式]
场景同进程的不同模块之前的通讯目前常用做法就是通过观察者模式来发送消息, 在JDK9里Observer和Observable类已经失效.所以已经不能使用它来进行注册和通知了。那么怎么办?说明在Observer类的说明里有以下的描述. 即在同步线程里可以使用java.beans包里进行处理事件模型. 而这个包下可以发现基本实现类是PropertyChangeSupport. 使用它来注册某个属性的修改监听,当然也可以把属性名换为监听的命令,比如kCommandTypeGetSiteInfo这种字符原创 2021-09-17 18:14:13 · 391 阅读 · 0 评论 -
[Java]_[初级]_[装箱和拆箱的陷阱-不要使用==进行包裹类型wrapper class比较]
场景在使用Java的Integer进行算术运算时, 偶尔发现使用 == 比较运算符两个int值一样的前提下结果是false, 什么原因?说明JDK5已经开始提供装箱(autoboxing)和拆箱(auto-unboxing)的功能,目的是可以在原始数据类型和包裹(wrapper)类型之间方便转换,也能方便进行算术运算. 这样就不需要频繁的调用Integer.intValue()或Integer.valueOf()来转换类型了.另一个作用就是在集合类里, 泛型类型必须是引用类型的,因此是没原创 2021-09-14 18:27:23 · 137 阅读 · 0 评论 -
[Java]_[初级]_[并发下使用AtomicReference来保证原子读写对象]
场景在开发Java多线程程序时,和C/C++一样会遇到多线程同时修改共享对象的问题。比如一个缓存HashMap需要更新,那么可以使用标准库的ConcurrentHashMap来替换HashMap作为共享对象。如果是自定义的对象呢,并发访问可能会造成访问错误。解决并发读写的方案之一是使用synchronized,但它只能作为最后的方案,因为加锁解锁是会耗费很多CPU时间的。而且synchronized多的时候容易造成死锁。说明在C/C++里可以使用atomic_load和atomic_原创 2021-08-05 17:19:47 · 527 阅读 · 0 评论 -
[Java]_[初级]_[可变参数的使用技巧]
场景在开发Java程序时,有些参数会是可变参数,比如String.format或者Java Web 框架jfinal里的Model方法find,就需要可变参数。问题来了,如果find参数sql字符串,或者format方法的format字符串是需要动态拼接的,那么它的可变参数值就是动态输入的,并不是固定值,怎么输入?public static String format(String format, Object... args);public M findFirst(java.lang.Str原创 2021-08-04 17:20:07 · 178 阅读 · 0 评论 -
[Java8]_[语言特性]_[Lambda表达式说明]
场景我们在使用 Java 的 Comparator 进行排序, 或Runnable进行运行线程时总是需要 new 一个新的匿名类出来, 并且需要实现抽象方法,有么有更方便的做法呢?Java SE 8开始已经可以支持Lambda表达式,它如何使用呢?说明在 Lambda 表达式出现以前, 我们实现一个 Comparator 比较器需要new一个匿名类, 并重写compare方法...原创 2020-02-21 11:55:56 · 360 阅读 · 0 评论 -
[Java]_[初级]_[实用的byte处理类]
场景:1. C++可以使用std::string来缓存uint8_t的字节数组,比如在接收socket数据包时, 需要接收完整才可以处理某些数据,这时候就需要先缓存起来再处理。2. 问题来了,Java的String是存储的UNICODE双字节结构,而且只支持字符,不支持如\0这些字符,并不适合处理字节数据.原创 2015-02-24 16:23:46 · 4963 阅读 · 0 评论 -
[Java]_[初级]_[String的split里的坑]
场景:1. 有时候需要使用某些字符来作为值的合并存储,比如以@作为分隔符, 232332@232323@323232, 用一个属性存储这3个值, 用的时候再拿出来split就可以了.2. 问题是有时候某个值会缺失,比如第一个值没有的情况, @232323@323232 第2,3个值没有的情况 232332@@ ,当然也期望是能返回3个值,只是后边2个值为空字符就行了。事实上,结果不是这样,即使 2,3个值没有的情况 232332@@ 也只返回第1个值,数组大小是1. 这就让人很迷惑,明明有分隔符,原创 2015-07-12 22:02:14 · 2353 阅读 · 0 评论 -
[Java8]_[增强功能]_[Base64编解码]
场景有时候我们需要在XML文件里保存一个缩略图,但是XML不支持不可见字符的保存,如何做?当我们需要在URL里POST或PUT一些不可见字符或特殊符号,比如+号,如何做?说明Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范.对...原创 2020-02-21 12:53:52 · 466 阅读 · 0 评论 -
[Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]
场景:1. 通过socket给Java传递byte[]数组时,utf-8的字节数组在转换为String, Java并不会遇到0就停止结束,而是一直使用完byte[]的容量,所以在转换为Java的String需要自己判断字节值是0的位置,再截取数组长度。原创 2015-03-30 23:08:17 · 20470 阅读 · 1 评论 -
[Java]_[初级]_[高效使用String.split的方法]
场景在开发Java Web项目时, 往往需要分析uri来做一些转发控制逻辑,如/online/android/info/support.html, 对uri的不同部分做处理. 一般情况下使用String.split(str)方法进行分割,但其实这个方法有更高效率的用法。说明String.split方法有两个重载方法,分别是带和不带limit参数的.String[] split(String regex);String[] split(String regex,int limit);原创 2021-08-04 16:15:30 · 261 阅读 · 2 评论