打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
流与文件管理与序列化(java vs DotNet)

涉及方面:流及流的包装(或组合),文件管理,序列化

流定义:可以从中读取一个字节序列的对象成为输入流

而可以写入一个字节序列的对象称为输出流

来源可以是文件,也可以是网络(socket),也可以是内存块。

序列化:将持久化(可以包括传输)一个对象的状态到流(如文件流,内存流)的过程。

 

Java

类体系

inputStream:输入流

outputStream:输出流

流组合

流分为两类,一类是从各种来源读取字节数据。如FileInputStream.

另一类是将字节组合为更有用的数据类型。如DateInputStream.java 可以使用流的组合来实现满足各种流特征的需要。如组合为既能缓存,从网络获取数据,按字符读取数据的流组合。

 

字符编码:在流以字符形式存储的时候,需考虑字符编码。以文本(字符)形式读写流时使用write,reader体系结构。

 

对象序列化ObjectOutputStream.writeObjectObjectInputStream实现对象的读入出。类只要实现Serializable 接口即可。在存储一个对象被对个对象共享时,存储会内部为对象分配一个序列号,这样在还原时,这个对象仍然是被多个对象共享。

序列化的版本管理:类可能发生变动,如何保证类在不同版本的兼容。序列化机制在序列化对象时会自动通过算法计算出类的指纹信息,当类发送变动,后类的指纹就会发生变动,序列化就会拒绝执行版本不一致的反序列化。可以通过给类添加一个静态的变量serialVersion 指定其值,这样在类序列化,反序列化时就不用在自动计算指纹。可以达到版本兼容的效果。但要自己确定两者确实可以兼容(类的数据域没有发生变化,否则可能发生问题,会忽略不一致的数据域)。

 为克隆而序列化:把对象序列化再读回来就可以获得对象的一个深拷贝。

FileChannel:文件内存映射,将一个文件的部分区域映射到内存中,增加读写熟读。

 

.net

文件管理File,Directory 提供静态方法管理文件,FileInfo,DirectoryInfo 提供文件与目录的详细信息。

流及流的包装类Stream,以文本形式进行读取的:StrreamReader,StreamWriter,以二进制读写的

BirnaryWriter,BinaryReader

序列化:为对象添加可序列化标识([Serializable]特性),可以使用BinaryFormatter.Serialize方法将对象序列化到紧凑的二进制流。也可以序列化到xmlsoap 等形式的流。对象图。可以通过标记来决定字段是否需要序列化。也可以给指定字段添加NoSerializable 标识,使该字段在序列化时不存储。序列化不同的类型可选择不同的序列化格式化程序

序列化时的类型保真:指序列化对象的同时记录对象的类型信息。BinaryFormatter 会保存对象的完全类型信息,SOAPxml不会。这样在跨应用程序域的.NET程序间,BinaryFormatter 可以实现更好的远程使用,而SOAP,XML,反而可以在不同的操作系统与编程语言间传递(如JAVA 也可以使用)。BinaryFormatter更专,SOAP,XML更广

可以定制序列化过程。实现ISerializable接口或使用一组.NET序列化特性。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Java】基础43:万流归宗
Java对象序列化Serializable- 耕牛 - 新浪BLOG
Java中的IO流基础知识
节点流和处理流
实用的IO工具类
Java之Properties及对象序列化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服