我已经开始将一个项目从使用Java标准日期迁移到Joda DateTime。
我的项目使用XML序列化将对象保存到XML文件中。在这个特殊的例子中,我有一个Item类,它有一个DateTime属性。
在某个时候,我正在初始化对象,包括像这样的DateTime属性:
Item item = new Item();
item.setIdSearchCriteria(this.searchCriteria.getId());
item.setUrl(fullUrl);
item.setTitle(itemTitle);
item.setDateTime(new DateTime());
我使用XMLEncoder使用辅助类序列化项目:
public void saveDataList(List<Serializable> dataList) throws DAOGenericException
{
if(dataList == null)
throw new IllegalArgumentException();
checkDirectory();
ArrayList<Serializable> writtenObject = (ArrayList<Serializable>) dataList;
FileOutputStream os;
try {
// Save data as xml file
os = new FileOutputStream(new File(fullFilename));
XMLEncoder encoder = new XMLEncoder(os);
encoder.writeObject(writtenObject);
encoder.close();
} catch (FileNotFoundException e)
{
throw new DAOGenericException(e.getMessage(),e);
}
}
显然,日期时间被保存在xml中。。。但毫无价值:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
<object class="java.util.ArrayList">
<void method="add">
<object class="com.pikes.domain.Item">
<void property="dateTime">
<object class="org.joda.time.DateTime"/>
</void>
<void property="id">
<int>1</int>
</void>
<void property="idSearchCriteria">
<int>1</int>
</void>
<void property="title">
<string>A title</string>
</void>
<void property="url">
<string>http://www.random-url.com</string>
</void>
</object>
</void>
</object>
</java>
显然,它没有保存任何东西,但不,它只是保存“实际”日期时间。我的意思是,如果我在15:30将项目保存在XML文件中,然后在18:00加载XMLhtml" target="_blank">文件,那么日期显示。。。18:00!!
当然,这不是我所期待的行为。我希望在XML文件中保存毫秒数,因此每当我反序列化对象时,每次都会得到相同的日期时间。
我做错了什么?
我还尝试了以下方法,得到了同样的结果:
item.setDateTime(DateTime.now());
item.setDateTime(Instant.now().toDateTime());
提前谢谢你。
我认为这是因为DateTime没有任何属性(即getXXX/setXXX),所以XMLEncoder不会找到任何要序列化的东西。
您可以用另一种处理序列化/反序列化的类型包装DateTime,例如这样的类型。。。
public class DateTimeHolder {
private DateTime dateTime;
// Use this to create one of these holders
public static DateTimeHolder holderFor(DateTime dateTime) {
DateTimeHolder h = new DateTimeHolder();
h.dateTime = dateTime;
return h;
}
// Use this to get the actual date time value
public DateTime dateTime() {
return dateTime;
}
// PROPERTIES...
public String getTime() {
// Format the date time as a string
}
public void setTime(String time) {
// Parse the string into a date time and set the field
}
}
如果希望对XML有更多的控制,最好使用更高级的框架,比如JAXB。(我以前从未真正使用过XMLEncoder…)
希望这有帮助
你需要创建一个java。豆。PersistenceDelegate
实现Jodatime,并将其设置为java上相应类型的持久化委托。豆。XMLEncoder
使用setPersistenceDelegate
方法。
本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化 将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化
问题内容: 我注意到存储在Redis中的某些序列化对象在反序列化方面遇到问题。 当我对Redis中存储的对象类进行更改时,通常会发生这种情况。 我想了解问题,以便为解决方案设计一个清晰的方案。 我的问题是,什么导致反序列化问题?移除公共/私人财产会引起问题吗?也许添加新属性?向类添加新功能会产生问题吗?那么更多的构造函数呢? 在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加
问题内容: Golang中将结构序列化和反序列化为字符串的最佳方法(完整性和性能)是什么,反之亦然? 例如,如果我有这个结构: 我想将其存储在Redis上并取回。我试过保存,整型和字符串,这很好,但是如何存储结构对象? 问题答案: 使用gob和base64可以解决问题,例如: 当您需要序列化自定义结构或类型(例如struct)时,只需添加以下行:
主要内容:1 Java序列化和反序列化,2 Java序列化的优点,3 java.io.Serializable接口,4 Java ObjectOutputStream,5 Java ObjectInputStream,6 Java序列化的例子,7 Java反序列化的例子1 Java序列化和反序列化 Java中的序列化是一种将对象状态写入字节流的机制。它主要用于Hibernate,RMI,JPA,EJB和JMS技术。 序列化的反向操作称为反序列化,其中字节流被转换为对象。序列化和反序列化过程与平台
本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列