« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9693949 建立时间:2004年12月20日 |

| |
[java语言]java Serializable的使用 原创空间, 软件技术, 电脑与网络
邢红瑞 发表于 2005/1/8 10:27:48 |
Java Serializable的功能很强大,ejb的实现使用了Serializable,以前做过这样的一个程序,就是把用户最后一次登陆的信息直接保存到数据库,后来发现保存一条记录确实麻烦,不如采取类似ejb的机制,直接保存类,接着发现一个新问题,把用户的密码保存,一是用户修改密码,保存毫无意思,二是容易泄露,看了看文档transient可以使序列化的类不保存数据。下面给出大致的流程,问了简单存储文件,而不是数据库。package test;
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Date;
/** * * @author hongrui xing */public class UserInfo implements java.io.Serializable{ private Date loggingDate = new Date(); private String uid; private transient String pwd; UserInfo(String user, String password) { uid = user; pwd = password; } public String toString() { String password=null; if(pwd == null) { password = "is null"; } else { password = pwd; } return "user info: \n " + "user: " + uid + "\n logging date : " + loggingDate.toString() + "\n password: " + password; } public static void main(String args[]) { save(); load(); } public static void save(){ UserInfo userInfo = new UserInfo("邢红瑞", "蛋白质"); System.out.println(userInfo.toString()); try { ObjectOutputStream o = new ObjectOutputStream( new FileOutputStream("userInfo.out")); o.writeObject(userInfo); o.close(); } catch(Exception e) { e.printStackTrace(); } } public static void load(){ try { ObjectInputStream in =new ObjectInputStream( new FileInputStream("userInfo.out")); UserInfo userInfo = (UserInfo)in.readObject(); System.out.println(userInfo.toString()); } catch(Exception e) { e.printStackTrace(); } }}需要注意的是反序列生成对象时,没有调用构造函数。 |
|
|