涉及方面:流及流的包装(或组合),文件管理,序列化
流定义:可以从中读取一个字节序列的对象成为输入流
而可以写入一个字节序列的对象称为输出流
来源可以是文件,也可以是网络(socket),也可以是内存块。
序列化:将持久化(可以包括传输)一个对象的状态到流(如文件流,内存流)的过程。
Java:
类体系
inputStream:输入流
outputStream:输出流
流组合:
流分为两类,一类是从各种来源读取字节数据。如FileInputStream.
另一类是将字节组合为更有用的数据类型。如DateInputStream.java 可以使用流的组合来实现满足各种流特征的需要。如组合为既能缓存,从网络获取数据,按字符读取数据的流组合。
字符编码:在流以字符形式存储的时候,需考虑字符编码。以文本(字符)形式读写流时使用write,reader体系结构。
对象序列化:ObjectOutputStream.writeObject与ObjectInputStream实现对象的读入出。类只要实现Serializable 接口即可。在存储一个对象被对个对象共享时,存储会内部为对象分配一个序列号,这样在还原时,这个对象仍然是被多个对象共享。
序列化的版本管理:类可能发生变动,如何保证类在不同版本的兼容。序列化机制在序列化对象时会自动通过算法计算出类的指纹信息,当类发送变动,后类的指纹就会发生变动,序列化就会拒绝执行版本不一致的反序列化。可以通过给类添加一个静态的变量serialVersion 指定其值,这样在类序列化,反序列化时就不用在自动计算指纹。可以达到版本兼容的效果。但要自己确定两者确实可以兼容(类的数据域没有发生变化,否则可能发生问题,会忽略不一致的数据域)。
为克隆而序列化:把对象序列化再读回来就可以获得对象的一个深拷贝。
FileChannel:文件内存映射,将一个文件的部分区域映射到内存中,增加读写熟读。
.net
文件管理:File,Directory 提供静态方法管理文件,FileInfo,DirectoryInfo 提供文件与目录的详细信息。
流及流的包装类:Stream,以文本形式进行读取的:StrreamReader,StreamWriter,以二进制读写的
BirnaryWriter,BinaryReader
序列化:为对象添加可序列化标识([Serializable]特性),可以使用BinaryFormatter.Serialize方法将对象序列化到紧凑的二进制流。也可以序列化到xml,soap 等形式的流。对象图。可以通过标记来决定字段是否需要序列化。也可以给指定字段添加NoSerializable 标识,使该字段在序列化时不存储。序列化不同的类型可选择不同的序列化格式化程序
序列化时的类型保真:指序列化对象的同时记录对象的类型信息。BinaryFormatter 会保存对象的完全类型信息,SOAP,xml不会。这样在跨应用程序域的.NET程序间,BinaryFormatter 可以实现更好的远程使用,而SOAP,XML,反而可以在不同的操作系统与编程语言间传递(如JAVA 也可以使用)。BinaryFormatter更专,SOAP,XML更广。
可以定制序列化过程。实现ISerializable接口或使用一组.NET序列化特性。
联系客服