有道云笔记 连接:
http://note.youdao.com/share/?id=7a322ea0150fbc678da417d68f53c9f4&type=note
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下可忽略:
《Java IO流》
把“流(Stream)”想象成捅在文件上的“管道”。
做一些个IO系统的项目用到的是这章内容。
输入/输出的方向是按程序(而不是文件来讲的)。从文件中读数据--输入流;往文件里写数据--输出流。
1字符 = 2字节。Java中是UNICODE字符串,UTF-16。
Stream结尾的都是字节流。
InputStream、OutputStream、Reader、Writer都是抽象类(非接口)。
将String直接写出的方法voidwrite(Stringstr)thorowsIOException是用到了String的一个构造方法,能将字符串转化为字符数组char[]。
总结:
Java的IO流,使用了装饰模式。InputStream只能读字节、Byte[]数组,
而reader的可以读char; 如果在reader上再装饰一层buffered,那么就可以读String,方法是readline()。
BufferedReader和BufferedWriter很普遍。readLine()是BufferedReader的好处之一,读一行。
注意InputStreamReader和Reader的区别,前者是针对InputStream对象的,后者是针对File的。一个是处理流,一个是节点流。
ISO8859_1 :欧洲的字符编码,包含所有西欧语言。也叫latin-1。
unicode:包含所有语言的编码集。包括utf-8,utf-16等。
GB**** :中文(国标)编码集。包括GBK,GB2312等。
上例,BufferedReader的封装是为了使用readLine()方法,常用。System.in:接收的是键盘输入,类型是InputStream。
上例,演示了处理流套装节点流。ByteArrayOutputStream,这种输出流将数据按“字节串”输出(而不是OutputStream的一个个字节输出);这样,进一步用DataOutputStream套装,就可以将数据按double、boolean等类型(分别占8和1个字节)直接写入,用的writeDouble()和writeBoolean()方法。
DataInputStream在网络传输中用于读取远端传过来的地址等信息(直接按int读)。
Object的序列化,最常见的例子是:Word中画一个矩形(或三角形等形状),是把这个矩形的信息放在一个Object中,存起来;下次启动Word时自动调取这个Object重新画出来。电子游戏的存盘,也是将当前场景中的所有按Object存起来。
注意,serializable接口是一个标识性接口,里面没有方法。这个标志是给编译器看的。
上例,transient,“透明的”,表示在序列化的时候不考虑进去。当把一个T对象序列化又反序列化后,i、j、d的值不变,但是k的值是0.说明序列化的时候没有把k算进去。
email: [email protected]