java编程思想(十一)总结

第十二章 Java I/O系统

12.1 File类

它既能表示特定文件的名称,又能表示目录下一组文件的名称

目录列表器(FilenameFilter接口):需实现accept()方法,一般使用正则表达式判断文件名是否符合,File实例对象可以调用listFilenameFilter ff)列举出符合条件的文件。

 

12.2 输入和输出

任何来自Inputstream或者Reader派生的类均含有read()(读取单一字节或者字节数组,面向字节),任何来自OutputStream或者Writer派生而来的类均含有write()(写入单一字节或则字节数组,面向字节)

 

12.3 添加属性和有用的接口

修饰器:利用层叠的数个对象为单一对象动态地、透明地添加职责的方式。

 

12.4 Reader和Writer(面向字符)

最明智的方法时尽量采用面向字符的ReaderWriter,一旦程序无法成功编译,则转向面向字节的类库。

可以采用适配器,对面向字符和面向字节的类转化(InputStreamReaderOutputStreamWriter

无论何时使用readLine(),都应该使用BufferedReader

 

12.5 自我独立的类RandomAccessFile

适用于由大小已知的记录组成的文件,seek()从一处移动到另一处,然后读取或者修改记录,getFilePointer()查找当前所处的文件位置

 

12.6 I/O流的典型使用方式

1.缓冲输入文件

FileInputReader(读文件)->BufferedReader(缓冲增加速度,readLine()

InputStreamReaderSystem.in)(适配器,得到Reader对象)->BufferedReader(缓冲增加速度,readLine()

2.从内存输入

StringReader(待读字符串),注意调用read()读的字符int需转化为char

3.格式化的内存输入

ByteArrayInputStreams.getBytes())->DataInputStream(调用readByte()一次一个字节读取)

4.文件输出

FileWriter->BufferedWriter->PrintWriter

5.定位读或者写文件

RandomAccessFile(调用seek()定位,getPointFile()当前位置,可以指定打开文件的方式)

 

12.7 标准I/O流

Java提供System.in(标准输入,InputStream),System.out(标准输出,PrintStream),System.err(标准错误,PrintStream

I/O重定向操作的是字节流,System.setOut(out)


12.8  对象序列化

实现Serializable接口的对象转换成字节序列,并能以该序列恢复原来的对象

持久性即对象的生命周期在程序调用之间,序列化对象写入磁盘,重新调用程序时恢复对象

对象流:ObjectOutputStream/ObjectInputStream

ObjectOutputStream的实例对象是out,则out..writeObject(o)//序列化o,前提O实现Serializable接口

ObjectInputStream的实例对象是in,则in.readObject()//反序列化恢复

序列化控制接口Externalizable,需实现writeExternal()(序列化控制逻辑)和readExternal()(反序列化控制逻辑)
transient关键字修饰的属性不会序列化

替代Externalizable接口的方法,1)实现Serializable接口

2)定义private writeObject(ObjectOutputStream stream){

stream.defaultWriteObject();//缺省序列化方法

stream.writeObject();//其他序列化逻辑

}

3)定义private readObject(ObjectInputStream stream){

stream.defaultReadObject(); //缺省反序列化方法

。。。//其他反序列化逻辑

}

Preferences API用于存储和读取用户偏好或者系统配置

例:Preferences prefs=Preferences.userNodeForPackage(PublicClass.class);  //userNodeForPackage用户偏好,systemNodeForPackage系统配置

可以理解是key-value存储,put/set

 

12.9 正则表达式

正则表达式语法见http://www.runoob.com/regexp/regexp-syntax.html

基本用法:

Pattern p = Pattern.compile("b*g");

Matcher m = p.matcher("bbbbbbg");

boolean b = m.matches();

System.out.println(b);


12.10 压缩

校验流:CheckedInputStream/CheckedOutputStream Adler32快于CRC32进行校验

压缩流:ZipOutputStream/ZipInputStream(针对Zip文件) GZIPOutputStream//GZIPInputStream(针对GZIP文件,简单压缩)

压缩文件:若out是GZIPOutputStream实例对象,则out.write()写数据至压缩文件

若out是ZipOutputStream实例对象,则需要1)out..putNextEntry(ZipEntity ze);//开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处

2)out.write()写数据至压缩文件

jar [option] destination [mainfest] inputfile(s)  //自动压缩文件





 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值