`
nathan09
  • 浏览: 144960 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

【读书笔记】TiJava——IO系统

 
阅读更多

File

•可表示文件也可表示目录
•相关类:FilenameFilter
•相关功能:
–list
–listFiles


io的装饰器模式

•一般先用缓冲装饰,再用其他装饰
•当使用DataOutputStream时,写字符串并且让DataInputStream能够恢复它的唯一可靠做法是用UTF-8编码,即使有writeUTF和readUTF方法

InputStream


•典型用法:
–DataInputStream in =new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(byte[]buf)))
–DataInputStream in =new DataInputStream( newBufferedInputStream( newFileInputStream("Data.txt")));

OutputStream


•典型用法
–DataOutputStream out= new DataOutputStream(new BufferedOutputStream( newFileOutputStream("Data.txt")));

Reader


•典型用法
–BufferedReader in =new BufferedReader(new FileReader(filename));

Writer


•典型用法
–PrintWriter w =new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))));
–PrintWriter w =new PrintWriter(fileName);

以上类图中,灰色类为装饰器类,白色为被装饰类!

标准IO

•System.out/err都是PrintStream,可以直接使用
•但System.in是一个InputStream,使用前必须先包装

序列化Serializable

•默认用法——Serializable
•ObjectOutputStream
–writeObject
•ObjectInputStream
–readObject
•反序列化时,必须保证虚拟机能找到.class文件

控制序列化Externaliable

•实现Serializable,并加了2个方法
–writeExternal
–readExternal
•这2个方法在序列化和反序列化时被自动调用
•区别:使用Externaliable的类,必须有默认构造函数。而Serializable不需要

Externaliable的替代方法

•实现Serializable
•类中添加writeObject和readObject,签名如下
–privatevoid writeObject(ObjectOutputStream s)throws IOException;
–privatevoid readObject(ObjectInputStream s)throws IOException,ClassNotFoundException;
•签名必须是private的

Preferences

•偏好、喜好
•Windows下,操作的是注册表

nio

通道与缓冲

•通道:channel
–如FileChannel
•缓冲:buffer
–如:ByteBuffer

大、小端

•大端:BE(BigEndian)
–一个存储字的低位存储在内存的高地址,高位存储在内存的低地址
•小端:LE(LittleEndian)
–一个存储字的低位存储在内存的低地址,高位存储在内存的高地址
•ByteBuffer默认使用BE

nio类图





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics