随笔分类 -  Java

摘要:NIO不但引进了高效的文件通道,而且新增了更加好用的文件工具家族,包括路径组工具Paths、路径工具Path、文件组工具Files。先看路径组工具Paths,该工具提供了静态方法get,输入某个文件的路径字符串,输出该文件路径的路径对象Path。通过get方法获取路径对象的代码示例如下: 有了Pat 阅读全文
posted @ 2019-05-08 19:01 pinlantu 阅读(399) 评论(0) 推荐(0) 编辑
摘要:前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了。尽管字节缓存享有缓存方面的性能优势,但传统I/O也有缓存输入输出流呀,大家都有缓存机制,凭什么说NIO的文件处理更高效?之所以目前还看不出 阅读全文
posted @ 2019-05-06 21:14 pinlantu 阅读(303) 评论(0) 推荐(0) 编辑
摘要:前面介绍了文件通道的读写操作,其中用到字节缓存ByteBuffer,它是位于通道内部的存储空间,也是通道唯一可用的存储形式。ByteBuffer有两种构建方式,一种是调用静态方法wrap,根据输入的字节数组生成对应的缓存对象;另一种是调用静态方法allocateDirect,根据输入的数值分配指定大 阅读全文
posted @ 2019-05-03 10:49 pinlantu 阅读(558) 评论(0) 推荐(0) 编辑
摘要:前面介绍的各色流式IO在功能方面着实强大,处理文件的时候该具备的操作应有尽有,可流式IO在性能方面不尽如人意,它的设计原理使得实际运行效率偏低,为此从Java4开始增加了NIO技术,通过全新的架构体系带来了可观的性能提升。NIO是“Non-blocking IO”的缩写,意思是非阻塞的IO,与之相对 阅读全文
posted @ 2019-05-01 10:34 pinlantu 阅读(433) 评论(0) 推荐(0) 编辑
摘要:前面介绍的文件I/O,不管是写入文本还是写入对象,文件中的数据基本是原来的模样,用记事本之类的文本编辑软件都能浏览个大概。这么存储数据,要说方便确实方便,只是不够经济划算,原因有二:其一,写入的数据可能存在大量重复的信息,但依原样写到文件的话,无疑保留了不少冗余数据,造成空间浪费;其二,写入的数据多 阅读全文
posted @ 2019-04-29 22:22 pinlantu 阅读(526) 评论(0) 推荐(0) 编辑
摘要:有些时候,开发者想把程序运行过程中的数据临时保存到文件,可是前面介绍的字符流和字节流,要么用来读写文本字符串,要么用来读写字节数组,并不能直接保存某个对象信息,因为对象里面包括成员属性和成员方法,单就属性而言,每个属性又有各自的数据类型及其具体数值,这些复杂的信息既不能通过字符串表达,也不能通过简单 阅读全文
posted @ 2019-04-27 11:47 pinlantu 阅读(545) 评论(0) 推荐(0) 编辑
摘要:文件输出流FileOutputStream跟FileWriter同样有个毛病,每次调用write方法都会直接写到磁盘,使得频繁的写操作性能极其低下。正如FileWriter搭上了缓存兄弟BufferedWriter那样,FileOutputStream也有自己的缓存兄弟BufferedOutputS 阅读全文
posted @ 2019-04-24 21:49 pinlantu 阅读(340) 评论(0) 推荐(0) 编辑
摘要:前面介绍了如何使用字符流读写文件,并指出字符流工具的处理局限,进而给出随机文件工具加以改进。随机文件工具除了支持访问文件内部的任意位置,更关键的一点是通过字节数组读写文件数据,采取字节方式比起字符方式有下列两个好处:1、文件长度以字节为单位计量,可以分配等长的字节数组,却无法分配合适长度的字符数组, 阅读全文
posted @ 2019-04-22 21:28 pinlantu 阅读(375) 评论(0) 推荐(0) 编辑
摘要:前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位置写入。这个问题真不好办,它意味着每次写操作都会覆盖掉原来的文件内容,注意是直接覆盖而非局部修改,可 阅读全文
posted @ 2019-04-20 10:09 pinlantu 阅读(713) 评论(0) 推荐(0) 编辑
摘要:前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作“字符流I/O”,其中字母I代表输入Input,字母O代表输出Output。可是FileWriter的读操作并不高效,缘由在于FileWriter每次调用 阅读全文
posted @ 2019-04-17 21:58 pinlantu 阅读(2927) 评论(1) 推荐(0) 编辑
摘要:前面介绍了文件的信息获取、管理操作,以及目录下的文件遍历,那么文件内部数据又是怎样读写的呢?这正是本文所要阐述的内容。File工具固然强大,但它并不能直接读写文件,而要借助于其它工具方能开展读写操作。对于写操作来说,需要通过文件写入器FileWriter搭配File工具才行。创建写入器对象的过程很简 阅读全文
posted @ 2019-04-15 18:01 pinlantu 阅读(622) 评论(0) 推荐(0) 编辑
摘要:程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘、固定在机箱中的硬盘、插在光驱中的光盘、插在USB接口上的U盘、笔记本电脑里的固态盘、手机中的闪存、相机里的SD卡等等。当然,操作系统层面已经统一了这些存储介质, 阅读全文
posted @ 2019-04-13 10:04 pinlantu 阅读(526) 评论(0) 推荐(0) 编辑
摘要:注解属于比较高级的Java开发技术,前面介绍的内置注解专用于编译器检查代码,另外一些注解则由各大框架定义与调用,像Web开发常见的Spring框架、Mybatis框架,Android开发常见的ButterKnife框架等等,都使用了大量的注解。为了更好地弄清注解的应用原理,接下来不妨尝试自定义注解, 阅读全文
posted @ 2019-04-10 23:08 pinlantu 阅读(1546) 评论(0) 推荐(0) 编辑
摘要:Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义。前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: 又如注解@FunctionalInterface,它的源码定义与之类似: 乍看过去,注解的定义竟与接口 阅读全文
posted @ 2019-04-08 21:23 pinlantu 阅读(330) 评论(0) 推荐(1) 编辑
摘要:之前介绍继承的时候,提到对于子类而言,父类的普通方法可以重写也可以不重写,但是父类的抽象方法是必须重写的,如果不重写,编译器就直接在子类名称那里显示红叉报错。例如,以前演示抽象类用法之时,曾经把Chicken鸡类的call方法改为抽象方法,方法声明代码如下所示: 倘若派生自鸡类的公鸡类没有重写cal 阅读全文
posted @ 2019-04-06 10:14 pinlantu 阅读(333) 评论(0) 推荐(0) 编辑
摘要:前面介绍了如何利用反射技术读写私有属性,不单是私有属性,就连私有方法也能通过反射技术来调用。为了演示反射的逆天功能,首先给Chicken鸡类增加下列几个私有方法,简单起见弄来了set***/get***这样的基本方法: 参照私有属性的反射操作过程,私有方法的反射调用可分解为如下三个步骤: 1、调用C 阅读全文
posted @ 2019-04-03 22:03 pinlantu 阅读(827) 评论(0) 推荐(2) 编辑
摘要:早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装、继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性别属性就被严严实实地封装了起来,不但外部无法修改性别属性,连公鸡类的子类都无法修改。如此一来,公鸡实 阅读全文
posted @ 2019-04-01 22:02 pinlantu 阅读(539) 评论(0) 推荐(0) 编辑
摘要:作为一门面向对象的编程语言,Java认为一切皆是对象,每个对象都能归属于某个类,甚至每个类均可提取出一种特殊的类型,即Class类型。早在前面介绍多态的时候,就提到每个类都存在独一无二的基因,通过比较实例的类基因与具体类名的类基因,即可分辨某个实例是否属于目标类。例如,若想获取公鸡类的类型,则可通过 阅读全文
posted @ 2019-03-30 09:11 pinlantu 阅读(453) 评论(0) 推荐(0) 编辑
摘要:前面在介绍清单用法的时候,讲到了既能使用for循环遍历清单,也能通过stream流式加工清单。譬如从一个苹果清单中挑选出红苹果清单,采取for循环和流式处理都可以实现。下面是通过for循环挑出红苹果清单的代码例子: 至于通过流式处理挑出红苹果清单的代码示例如下: 然而上述的两段代码只能在数据完整的情 阅读全文
posted @ 2019-03-27 20:41 pinlantu 阅读(1454) 评论(0) 推荐(0) 编辑
摘要:每个程序员都希望自己的程序稳定运行,不要隔三岔五出什么差错,可是程序运行时冒出来的各种异常着实烦人,令人不胜其扰。虽然可以在代码中补上try/catch语句捕捉异常,但毕竟属于事后的补救措施。与其后知后觉地亡羊补牢,不如一开始就未雨绸缪,只要防患于未然,必能收到事半功倍的成效。就编码时的常见异常而言 阅读全文
posted @ 2019-03-25 09:59 pinlantu 阅读(426) 评论(0) 推荐(0) 编辑