20155335俞昆 《java程序设计》第八周总结
2016-2017-2 《Java程序设计》第X周学习总结
##认识NIO
在java中,输入与输出,基本上是以字节为单位进行的低层次处理,实际上多半是对字节数组中整个区块进行处理,对于dump()方法,必须处理byte[] ,必须指定写出的byte[]的起点和字节数。例如
Java..io套件中有一些装饰类,例如DataInputStream,dataOutputStream,BufferedReader与Bufferedwriter等,若只要对字节或字符串中感兴趣的数据区块进行标记,像是标记读取位置、数据有效位置,对于这些区块标记,提供了clear()、rewind()、flip()、compact()等高级操作,对于上面的dump()方法,若使用NIO的话,可以如下撰写:
现阶段可了解在程序示范中,只要确认将数据从Channel中读入Buffer(read()方法不返回-1),使用高级flip()方法标记Buffer中读入Buffer中读入的数据写到另一个Channel,最后使用clear()方法清除Buffer标记,在这个过程中,不用接触byte[]相关细节。
Channel架构与操作
NOI中Channel的相关接口与类,是位于java.nio.channle套件之中,Channel接口是AutoCloseable的子接口,因此都可以使用尝试关闭资源语法,channel接口上主要新增isopen()的方法。
ReadableByteChannel定义了read()方法,负责将ReadableByteChannel中的数据读取至ByteBuffer,writeableByteChannel定义了write()方法,负责将ByteBuffer的数据写到writeableByteChannel中,ScatteringByteChannel定义了read()方法,可以讲ScatteringByteChannel分配到ByteBuffer数组中,GatheringByteChannel定义的write()方法可以将ByteBuffer数组的数据写到GatheringByteChannel。
WriteableByteChannel的行为,ByteChannel的字接口SeekableByteChannel可以读取改变下一个要读取存储的位置。
Buffer的架构与操作
在NOI设计中,数据都在java。Nio.Buffer中的处理,Buffer是个抽象类,定义了clear()、flip()、reset()、rewind()等对数据区块的高级操作,这类操作返回类型都是Buffer,实际上返回this,因此在需要连续高级操作时,可以形成管线操作风格。
根据不同的数据处理类型需求,可以选择不同的·Buffer子类,他们都是抽象类,因此不 能直接实例化,然而Buffer的直接子类们都有一个allocate()的静态方法,让指定的Buffe容量,如果是ByteBuffer,容量是指内部操作时使用的byte[]长度,如果是FloatBuffer,容量是指Float[]长度,以此类推,Buffer容量大小可以使用capacity()方法取得,如果想使用Buffer内部的数组,可以使用array()的方法,如果有一个个数组想要转换为某个Buffer子类实例时,每个Buffer()子类实例都有warp()静态方法提供这个服务。
如果使用ByteBuffer,还有一个allocateDirect()方法,相对于allocate()方法配置的内存有JVM管理,allocateDirect()会利用操作系统的原生I/O操作,试着避免JVM的中介转接,理论上会比allocate()配置的内存更为有效,但是allocateDirect()的配置内存时会消耗较多系统资源,故建议只用在大型、存货长的ByteBuffer对象,并能观察除明显的功能差异的场合,通过isdirect()得知。
Buffer是个容器,填装的数据不会超过他的容量,实际读取或写入的数据界限索引值可以由limit()方法得知或限定。
Bufffer的操作可以先从clear(),flip(),与rewind()开始认识,当一个缓冲区刚被配置或调用clear方法后,limit()等于capacity(),position()会是0,。
以下是一个使用flip()完整的范例
Buffer上还有个mark()方法,可以在目前position上标记,存取buffer之后,若调用reset()方法,会将position设回被mark()标记的位置。Position与limit之间为剩余可存取的资料,可以使用remaining()方法得知还有多少长度,使用hasReamming()可以测试是否还有剩余可存取的数据。
NIO2的架构
应用程序开发者主要使用java.nio.flie与java.nio.file.attribute,包中必须操作的抽象类或接口,由文件系统提供者操作,应用程序无需担心底层如何实际存取文件系统,通常只有文件系统才需关心java.nio.file.spi包。
NIO2文件系统的中心是java.nio.file.spi.FileSystemProvider,本身为抽象类.,是文件系统提供者才能操作的类,作用是产生java.nio.file与java.nio.file.attribute中的各种抽象类或接口的操作对象。
对学习者而言,只要知道有FileSystemProvider的存在即可,我们可以通过java.nio.file包中FileSystem、paths、files、等类提供的静态方法,取得相关操作对象或进行各种文件系统的操作,这些静态方法内部会运用FileSystemProvider来取得所需的操作对象,完成操作。
要操作文档,先要指出文档路径。Path实例是在JVM中路径的代表对象,也是NIO2文件系统API操作的起点,NIO2文件系统API中有许多操作,都必须使用Path指定路径。
想要取得path实例,可以使用Paths.get方法,最基本的使用方式,就是使用字符串路径,可使用相对路径或绝对路径,例如:
Path workspace = Paths.get(“C:\\workspace”);
Path books = Paths.get(“Desktop\\books);
Path path = Path.get(args[0]);
Paths.get()的第二个参数开始接受不定长度的自变量,因此可以指定路径,之后的路径分段指定。例如以下指定用户目录下的Documents\Downloads:
Paths实例仅代表路径信息,该路径实际上对应的文档或文件夹不一定存在。Path提供一些方法取得路径的各种信息,例如:
路径元素以文件夹为单位,最上层索引为0。
Paths操作了Iterable接口,若要循序渐进取得Path中分段的路径信息,也可以使用增强式for循环语法或forBath()方法,例如:
Path.path = Path.get(System.getProperty(“users.home),””Documents”,”Documents”);
Path.forEach(out::println);
路径中有冗余信息,可以使用normorlize。
读取访问目录
如果想要取得文件系统根目录路径信息,可以使用FileSyatem的getRootDirectories()方法,这会返回Iterabe<String>对象,可用增强式for或循环或新增的forEach()方取得根目录的路径信息,例如:
也可以使用Files.newDirectoryStream()方法取得DirectoryStream接口操作对象,代表路径下的所有文档。
这个范例可以从命令行自变量指定目录路径,查询该目录下的文档:
尽量简单的总结一下本周学习内容
尽量不要抄书,浪费时间
看懂就过,看不懂,学习有心得的记一下
## [代码托管](码云学习项目链接)
http://git.oschina.net/tianmaxingkomg/xinjianxianmu
(statistics.sh脚本的运行结果截图)
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:[软件工程软件的估计为什么这么难](http://www.cnblogs.com/xinz/archive/2011/04/05/2005978.html),[软件工程 估计方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294.html)
- 计划学习时间:14小时
- 实际学习时间:16小时
- 改进情况:
(有空多看看[现代软件工程 课件
软件工程师能力自我评价表](http://www.cnblogs.com/xinz/p/3852177.html))
## 参考资料
-
[Java学习笔记(第8版)](http://book.douban.com/subject/26371167/)
- [《Java学习笔记(第8版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
-
...
20155335俞昆 《java程序设计》第八周总结的更多相关文章
- 201521123027 <java程序设计>第八周学习总结
1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...
- 20155335俞昆《Java程序设计》第五周总结
# 20155335 <Java程序设计>第五周学习总结 ## 教材学习内容总结 ## 教材学习中的问题和解决过程 对于异常处理,程序中总有意想不到的状况所引发的的错误,Jav ...
- 20155335俞昆《java程序设计》第三周总结
20155335 2006-2007-2 <Java程序设计>第三周学习总结 ## 教材学习内容总结 首先,关键是区基本类型和类类型,,产生对象必须定义类,类是一个概念,并不存在,对 ...
- 20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结
学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不 ...
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
随机推荐
- 学习笔记之form表单
form表单提交的数据 是字典类型 这样 方便在create时候 直接解压
- Windows 下vim的配置文件_vimrc
set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ...
- BZOJ1916[USACO 2010 Open Gold 2.Water Slides]——DP+记忆化搜索
题目描述 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园.当然,它最大的亮点就是新奇巨大的水上冲浪.超级轨道包含 E (1 <= E <=15 ...
- BZOJ3172[Tjoi2013]单词——AC自动机(fail树)
题目描述 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个 ...
- AOP 获取 RequestContextHolder
转载: http://blog.csdn.net/lexang1/article/details/52619215 在使用spring时,经常需要在普通类中获取session,request等对像. ...
- NOIP 2018 游记(退役了!)
一片空白 在霉的不能再霉的18年11月,Noip2018上,倒霉的我也是贼有意思,感冒加身,D2发烧,数组开小…我还能说什么MMP,身体和考试能力真的很重要. ……(省略无数字的心理活动,有空补上~) ...
- 获取get值&DOM例题
获取get值: <body> <form action="9.26获取get值.html" method="get"> ...
- 有趣的filter
js中的filter就是过滤的意思,比如,我们以什么样的方式进行过滤,得到我们想要的结果. 对,我们要的就是这个结果. 给定一个数组,我们要的是Burger(汉堡) const restaurants ...
- 安装 scrapy 报错 error: Microsoft Visual C++ 14.0 is required
问题描述 使用 pip install scrapy 安装 scrapy 时出现以下错误: error: Microsoft Visual C++ 14.0 is required 错误提示中给出了一 ...
- 洛谷 P1282 多米诺骨牌("01"背包)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://blog.csdn.net/Darost/artic ...