A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 党传才 中级黑马   /  2012-4-17 10:11  /  1971 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中?有什么方法可以直接写入么?

4 个回复

倒序浏览
目前,没有直接的方法可以将对象写入到随机存取文件中.  
但是可以使用ByteArray输入/输出流作为中介,来向随机存取文件中写入或从随机存取文件中读出字节,并且可以利用字节流来创建对象输入/输出流,以用于读写对象.需要注意的是在字节流中要包含一个完整的对象,否则读写对象时将发生错误. 例如,java.io.ByteArrayOutputStream可用于获取ObjectOutputStream的字节流,从中可得到byte数组并可将之写入到随机存取文件中.相反,我们可以从随机存取文件中读出字节数组,利用它可构造ByteArrayInputStream,进而构造出ObjectInputStream,以读取对象.
回复 使用道具 举报
要想将一个类的对象写入到文件中,首先这个类必须实现Serializable接口,然后使用ObjectInputStream 和 ObjectOutputStream(他们的构造方法接受一个字节流的参数,可以传入一个文件读取流) 的readObject()和writeObject()方法进行读写
回复 使用道具 举报
本帖最后由 张晨 于 2012-4-17 11:22 编辑

楼上的都说了 给你个实例
  1. public  void writeToDisk() throws FileNotFoundException, IOException {
  2.                 ObjectOutputStream out =
  3.                                 new ObjectOutputStream (new FileOutputStream( new File( getExternalFilesDir(null),"cmbCalculatordata.dat"),false));
  4.                 out.writeObject(dataOne);
  5.                 out.writeObject(dataTwo);
  6.                 out.close();
  7.         } // end writeToDisk
  8.         public  void readFromDisk() throws StreamCorruptedException, FileNotFoundException, IOException, ClassNotFoundException
  9.         {
  10.                 ObjectInputStream input =
  11.                                 new ObjectInputStream (new FileInputStream( new File( getExternalFilesDir(null),"cmbCalculatordata.dat")));
  12.                
  13.                 dataOne = (DataBean)input.readObject();
  14.                 dataTwo = (DataBean)input.readObject();
  15.                 input.close();
  16.         } // end readFromDisk
复制代码
回复 使用道具 举报
给你个对象的序列化的说明:
序列化 (serialization)
  将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。   序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。在默认策略下,通过 Internet 下载的代码或 Intranet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。   通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。   对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。
编辑本段序列化解释
  序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
编辑本段序列化的目的
  1、以某种存储形式使自定义对象持久化;   2、将对象从一个地方传递到另一个地方。   3、使程序更具维护性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马