20145223 《Java程序设计》第8周学习总结
教材学习内容总结
第十四章 NIO与NIO2
·NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区(Buffer)容量,在缓冲区中对感兴趣的数据区块进行标记,像是标记读取位置、数据有效位置,对于这些区块标记,提供了clear()、rewind()、flip()、compact()等高级操作。
·Channel架构与操作:想要取得Channel的操作对象,可以使用Channels类,它定义了静态方法newChannel(),可以让你从Inputstream、OutputStream分别建立ReadableByteChannel、WritableByteChannel。
·如果已经有相关的Channel实例,也可以通过Channels上其他newxxx()静态方法,取得InputStream、OutputStream、Reader、Writer实例。
·Buffer的直接子类们都有一个allocate()静态方法,可以让你指定Buffer容量。(填装的数据不会超过它的容量)
·应用程序开发者可以通过java.nio.file包中FileSystems、Paths、Files等类提供的静态方法,取得相关操作对象或进行各种文件系统操作,这些静态方法内部会运用FileSystemProvider来取得所需的操作对象,完成应有的操作。
第十五章 通用API
·java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处。使用日志的起点是Logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,要取得Logger实例,必修使用Logger的静态方法getLogger()。
·调用getLogger()时,必须指定Logger实例所属名称空间,名称空间以“.”作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。
·Logger是记录信息的起点,要输出的信息,必须先通过Logger的Lever与Filter过滤,在通过Handler的Lever与Filter过滤,格式化信息的动作交给Formatter,输出信息的动作实际上是Handler负责。
·Logger有层级关系,名称空间层级相同的Logger,父Logger组态会相同,每个Logger处理完自己的日志动作后,会向父Logger传播,让父Logger也可以处理日志。
使用Handler与Formatter
·Java SE提供了五个预设的Handler:
·java.util.logging.ConsoleHandler
·java.util.logging.FileHandler
·java.util.logging.StreamHandler
·java.util.logging.SocketHandler
·java.util.logging.MemoryHandler
·Logger阶层关系:给getLogger()方法的名称是有意义的
·给定“onlyfun”,实际上您将从根(Root)logger继承一些特性再取得一个Logger实例,并给定名称"onlyfun.caterpillar",则这次取得的Logger将继承"onlyfun"这个Logger的特性
·使用ResourceBundle:用java.util.ResourceBundle来作讯息绑定messages.properties
.properties档案必须放置在Classpath的路径设定下
·在创建FileHandler指定模式字符串:
·1、使用“%h”来表示用户的根目录
·2、使用“%t”取得系统暂存目录
·3、使用“%g”自动为文档编号
·4、使用“%h/config%g.log”表示将configN.log文件存储在用户根目录下,N表示每个信息的文档编号,会自动递增。
·如果java.util.logging包中提供的Handler成果都不符合需求,可以继承Handler类,操作抽象方法publish()、flush()、close()方法来自定义Handler。
·在职责分配上,Handler是负责输出,格式化是交由Formatter,而信息过滤是交给Filter。Handler有默认的isLoggable()操作,会先依据Level过滤信息,再使用指定的Filter过滤信息。format()方法会传入LogRecord,存储所有日志信息。
·除了依据层级过滤之外,还可以加入额外过滤条件,,就可以操作Filter接口。
·国际化:
·1.国际化的三个重要概念是地区信息、资源包、基础名称。
·2.建立一个message.zh_TW.properties,必须使用Unicode编码表示,则可以通过JDK工具程序native2ascii来协助转换。如果想将Unicode编码表示的.properties转回中文,则可以使用—reserve自变量。
·想提供messages_en_US.properties档案,并想要ResourceBundle.getBundle()取得这个档案的内容:
Locale locale = new Locale("en", "US");ResourceBundle resource = ResourceBundle.getBundle("messages", locale);
·预定义字符类. :任一字符d:比较任一数字字符D:比较任一非数字字符s:比较任一空格符S:比较任一非空格符w:比较任一ASCII字符W:比较任一非ASCII字符
其他(感悟、思考等,可选)
·这一周的内容对于动手实践的要求并不多,很多内容都是关于概念性的理解。我觉得这些内容真正要掌握还是需要在今后的动手实践过程中再加以理解,否则光看概念性的知识,还是觉得会空洞和抽象,并不是很能理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 20篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 15/12 | |
第二周 | 180/380 | 1/1 | 18/12 | |
第三周 | 600/980 | 1/1 | 17/16 | |
第四周 | 400/380 | 1/1 | 16/15 | |
第五周 | 300/680 | 1/1 | 14/14 | |
第六周 | 200/200 | 2/2 | 10/10 | |
第七周 | 100/100 | 2/2 | 10/10 | |
第八周 | 50/50 | 1/2 | 5/5 |
代码托管截图
通过这一次的实验,我终于学会了用git直接托管代码,而不是在网页上一个个地托管,这样不但麻烦而且很没有效率,现在我就能用git将包括之前的所有的代码一次性托管好,十分省时省力。