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 ...
随机推荐
- HADOOP实战
一.软件版本Centos6.5.VMware 10CDH5.2.0(Hadoop 2.5.0)Hive-0.13 sqoop-1.4.5 二.学完课程之后,您可以:①.一个人搞定企业Hadoop平台搭 ...
- MySQL_基础知识
-----基础知识 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 2.什么是关系型数据库.主键,外键,索引分别是什么? 关系型数据 ...
- python 协程库gevent学习--gevent数据结构及实战(四)
一不留神已经到第四部分了,这一部分继续总结数据结构和常用的gevent类,废话不多说继续. 1.Timeout错误类 晚上在调试调用第三方接口的时候,发现有些接口耗时非常多,觉得应该有个超时接口来限制 ...
- BZOJ3075[USACO 2013 Mar Gold 3.Necklace]——AC自动机+DP
题目描述 给你一个长度为n的字符串A,再给你一个长度为m的字符串B,求至少在A中删去多少个字符才能使得B不是A的子串.注:该题只读入A和B,不读入长度,先读入A,再读入B.数据保证A和B中只含小写字母 ...
- Sql 重置自动增长列
Sql 重置自动增长列: dbcc checkident(表名, reseed, 0) 使用的情况,一般出现在主外键关联表,导致无法 truncate 只能delete的情况. 此时我们可能会需要重置 ...
- HS BDC HDU - 3472(混合欧拉路径)
题意: 就是混合欧拉路径板题 解析: 欧拉路径加一条t_ ---> s_ 的边就变成了欧拉回路,所以利用这一点,如果存在两个奇点,那么这两个奇点出度大的是s_,入度大的是t_,加一条t_ -- ...
- 【刷题】BZOJ 2407 探险
Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...
- pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...
- 洛谷P4364 IIIDX
题意:给定n个数和k,把n个数排成序列,满足ai >= ai/k,并使之字典序最大. 解:毒瘤线段树贪心... 以i/k为i的父亲构树. 当这n个数不同的时候,直接后序遍历贪心即可. 正解神奇的 ...
- MUI 选项卡切换+下拉刷新动态 完整实现一例
前台最终呈现的代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...