ajian005
对
Thinking in Java
的书评
发表时间:2011-05-16 17:05:23
博学,审问、慎思、明辨、笃行
读实用书时要提出的四个问题:
(1)整体来说,这本书到底在谈些什么?big what? 并没有改变多少。
(2)作者细部说了什么,怎么说的? small what? how?
(3)这本书说得有道理吗? 是全部有道理,还是部分有道理?why?
作者最终的目标,加上他建议的达成目标的方法--这要看你认为追求的是什么,以及什么才是最好的追求方法而定。
在什么范围,什么条件下适用,在什么范围,什么条件下不适用。要知道它能做什么,它不能做什么
(4)这本书跟你有什么关系? 理论联系实际
赞同一本实用性的书,确实需要你采取行动。 照着作者希望你做的方式来行动。How
行动:为达到某种目的而进行的活动。行动目标,行动方法,行动开始时间,结束时间,行动人,行动地点,行动方式。
学车/骑自行车:理论就是要做题,实践:就是要上车操练。
武术:主要是实践
厨艺:理论就是看菜谱,实践:按菜谱买菜,配菜,实际炒菜,品尝,调整
木匠/铁匠/建筑师:设计、实践,调整,在设计,在实践。
美容美发:
装修
裁剪
编程/软件工程/建筑工程在道的层次上很相近
最忌讳:1 没有目标/提不出问题,没有时间和资源限制,自己太放松,要有适当的紧迫感和压力感
2 重“看书”,轻“提问题,思考,讨论,实践” 有没有收获 关键看思考的深度是否能够表达出来,实践出的东西是否是可见的。
1 什么是I/O?I/O做什么用的? I/O与Net有什么异同?
2 每一节说了什么,怎么说的?
3 这一章说的有道理吗? 是全部有道理,还是部分有道理? why要用I/O?
4 这一章跟自己有什么关系?
赞同一本实用性的书,确实需要你采取行动。 照着作者希望你做的方式来行动。How
如何编一些多线程HttpServer,或 TCPServer, SipServer,WebServer, 聊天室,接入,分发服务器
连接网络、连接数据库、读写文件、Spring、Hibernate、Struts启动过程中如何读写文件的呢?
计算机启动顺序及原理是什么?OS(Linux/Windows)启动加载原理是什么? DB(Oracle/Mysql)启动加载原理是什么? 应用服务器(Tomcat)启动原理?JVM启动原理?应用程序启动原理是什么?
实际操作(编写代码),做实验。
编程与开车,厨艺 有想通的地方,理论指导,以实践为主。
练习题没做:(11)、(20)、(23)、(25)、(26)、(28)、(29)、(30)、(31)、(32)
本章涉及到得算法和数据结构:递归、树(文件及目录)
本章涉及到得设计模式:“装饰器”模式Decorator 策略模式、Callback、回调模式(18.1.1 目录列表器)、模板方法(18.10.6内存映射文件)
第18章 JavaI/O (研习:次 掌握层次:)P561 文件I/O 网络I/O 答案:P517
JavaI/O主要解决什么问题?
主要解决在各种I/O源端和想要与之交互的接收端(文件、控制台、网络链接等)以多种不同的方式(如 顺序、随机存取、缓冲、二进制、按字符、按行、按字等)进行通信。
JavaI/O系统主要采用了装饰者模式设计
18.1 File类(研习:2次 掌握层次:领会+) P561 设计模式:策略模式
File类是文件和目录路径名的抽象表示形式。File主要处理文件目录问题,名称起的有点歧义,用FilePath(文件目录)是个更好的名字。
18.1.1 目录列表器(研习次:2 掌握层次:领会)
匿名内部类P563
18.1.2 目录实用工具(研习次:2 掌握层次:半领会)
ProcessFiles要进一步研究
18.1.3 目录的检查及创建P568 (研习次:2 掌握层次:领会)
18.2 输入和输出(研习:1次 掌握层次:领会)P569
“流”代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。“流”屏蔽了实际的I/O设备中处理数据的细节。
实际上,Java中"流"类库让人迷惑的主要原因就在于:创建单一的结果流,却需要创建多个对象。
Reader和InputStream的区别:
Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,InputStream、OutputStream是用来处理8位元的流,Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。
下面是java.sun.com上的原话:
To read and write 8-bit bytes, programs should use the byte streams, descendants of InputStream and OutputStream.
Reader provides the API and partial implementation for readers--streams that read 16-bit characters--and Writer provides the API and partial implementation for writers--streams that write 16-bit characters.
18.2.1 InputStream类型P570
18.2.2 OutputStream类型
18.3 添加属性和有用的接口(研习:2次 掌握层次:领会) P571 (通过FilterInputStream/FilterOutputStream类可以把属性或有用的接口与输入流连接起来。)
18.3.1 通过FilterInputStream从InputStream读取数据 P572
18.3.2 通过FilterOutputStream从OutputStream读取数据 P572
18.4 Reader和Writer(研习次:1 掌握层次:领会)P573
设计Reader和Writer集成层次结构主要是为了国际化。老的I/O流继承层次结构仅支持8位字节流,并且不能很好地处理16位的Unicode字符。由于Unicode用于字符国际化(Java本身的char也是16位的Unicode)
18.4.1 数据的来源和去处
18.4.2 更改流的行为
18.4.3 未发生变化的类
18.5 自我独立的类:RandomAccessFile(研习:2次 掌握层次:领会) P575
一个类就可以读写文件
18.6 I/O流的典型使用方式(研习:2次 掌握层次:领会)P576 2011-5-13 20:42-
18.6.1 缓冲输入文件
18.6.2 从内存输入
18.6.3 格式化的内存输入
18.6.4 基本的文件输出
文本文件输出的快捷方式
18.6.5 存储和恢复数据P579
18.6.6 读写随机访问文件P580
18.6.7 管道流P581
18.7 文件读写的实用工具(研习:2次 掌握层次:领会)P582
18.7.1 读取二进制文件
18.8 标准I/O P584(研习:2次 掌握层次:领会)
18.8.1 从标准输入中读取
18.8.2 将System.out.转换成PrintWriter
18.8.3 标准I/O重定向P585
18.9 进程控制(研习:2次 掌握层次:领会) P586
18.10 新I/O(研习:2次 掌握层次:领会) P588
唯一直接与通道交互的缓冲器是ByteBuffer
18.10.1转换数据(研习次:2 掌握层次:领会) P590
18.10.2获取基本类型(研习次:2 掌握层次:领会) P592
18.10.3视图缓冲器(研习次:2 掌握层次:领会) P593
字节存放次序:
big endian(高位优先):将最重要的字节存放在地址最低的存储器单元。ByteBuffer和网络上传输的数据使用高位优先的形式。
little-endian(低位优先):将最重要的字节存放在地址最高位的存储器单元。
18.10.4用缓冲器操纵数据(研习次:2 掌握层次:领会) P596
18.10.5缓冲器的细节(研习次:1 掌握层次:领会)P596
18.10.6内存映射文件 P599
内存映射文件允许我们创建和修改哪些因为太大而不能放入内存的文件。
性能P600
18.10.7文件加锁 P602
18.11 压缩(研习次:2 掌握层次:领会) P604
压缩类库是按字节方式而不是字符方式处理的。不过可以通过(InputStreamReader和Output-StreamWriter在两种类型间方便地进行转换)
GZIP或ZIP库不仅可以压缩文件,而且可以压缩在网络上发送的数据
18.11.1用GZIP进行简单压缩
18.11.2用Zip进行多文件保存
18.11.3Java档案文件
18.12 对象序列化(研习:1次 掌握层次:领会) P608
对象序列化就是继承Serializable标识接口即可。轻量级持久化。
18.12.1 寻找类
18.12.2 序列化的控制P611
translent(瞬时)关键字:该字段不序列化,只能与Serializable
Externalizable的替代方法
版本控制
18.12.3 使用“持久性”
18.13 XML(研习次:1 掌握层次:领会) P622
18.14 Preferences(研习次:1 掌握层次:领会) P624 (Properties)
Preferences API用于存储和读取用户的偏好(preferences)以及程序配置项的设置。是一个键-值集合(类似映射),存储在一个节点层次结构中。
18.15 总结(研习次:2 掌握层次:领会)P625
深入理解“装饰器”模式。
网络参考:IO与文件读写---Java的IO流架构 http://blog.csdn.net/skytalemcc/archive/2010/03/03/5340010.aspx
《Java NIO》
《Java网络编程(中文版 第三版)(O'Reilly Java系列)》
参考:jdk7.0 发布i/o新功能: aio
Java I/O:
java.nio.file 包以及相关的包 java.nio.file.attribute 提供对文件 I/O 以及访问文件系统的全面支持,
请看 File I/O (featuring NIO.2).
目录 <Java home>/sample/nio/chatserver/ 包含使用 java.nio.file包的演示程序
目录 <Java home>/demo/nio/zipfs/包含 NIO.2 NFS文件系统的演示程序
NIO底层实现poll, epoll(jdk1.5update 9 和jdk1.6 仅限于 linux 2.6以上 )
Java NIO 选择器(Selector) 知识预备 (linux epoll)
http://www.goldendoc.org/2011/07/java-nio-selector-pre-linux-epoll/
Channel & FileDescriptor http://www.goldendoc.org/2011/08/channel-filedescriptor/
Java NIO 选择器(Selector)与通道(Channel)_1 (linux poll & epoll 回顾)
http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8%E4%B8%8E%E9%80%9A%E9%81%93_1-%EF%BC%88linux-poll-epoll-%E5%9B%9E%E9%A1%BE%EF%BC%89/
Java NIO 选择器(Selector)与通道(Channel)_2(选择器的创建过程)
http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8%E4%B8%8E%E9%80%9A%E9%81%93_2%EF%BC%88%E9%80%89%E6%8B%A9%E5%99%A8%E7%9A%84%E5%88%9B%E5%BB%BA%E8%BF%87%E7%A8%8B%EF%BC%89/
Java NIO 选择器(Selector)与通道(Channel)_3(选择器处理注册的过程) http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8%E4%B8%8E%E9%80%9A%E9%81%93_3%EF%BC%88%E9%80%89%E6%8B%A9%E5%99%A8%E5%A4%84%E7%90%86%E6%B3%A8%E5%86%8C%E7%9A%84%E8%BF%87%E7%A8%8B%EF%BC%89/
Java NIO 选择器(Selector)与通道(Channel)_4(选择器处理反注册的过程) http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8%E4%B8%8E%E9%80%9A%E9%81%93_4%EF%BC%88%E9%80%89%E6%8B%A9%E5%99%A8%E5%A4%84%E7%90%86%E5%8F%8D%E6%B3%A8%E5%86%8C%E7%9A%84%E8%BF%87%E7%A8%8B%EF%BC%89/
Java NIO 选择器(Selector)与通道(Channel)_5(选择器的选择过程) http://www.goldendoc.org/2011/07/java-nio-%E9%80%89%E6%8B%A9%E5%99%A8selector%E4%B8%8E%E9%80%9A%E9%81%93channel_5%EF%BC%88%E9%80%89%E6%8B%A9%E5%99%A8%E7%9A%84%E9%80%89%E6%8B%A9%E8%BF%87%E7%A8%8B%EF%BC%89/
Java NIO 那些躲在角落的细节 http://www.goldendoc.org/2011/08/java-nio-small-things/