我尝试将对象添加到List<String>实例,但它会抛出一个UnsupportedOperationException.有谁知道为什么?
我的Java代码:
String[] membersArray = request.getParameterValues('members');
List<String> membersList = Arrays.asList(membersArray);
for (String member : membersList) {
Person person = Dao.findByName(member);
List<String> seeAlso;
seeAlso = person.getSeeAlso();
if (!seeAlso.contains(groupDn)){
seeAlso.add(groupDn);
person.setSeeAlso(seeAlso);
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息:
java.lang.UnsupportedOperationException
java.util.AbstractList.add(Unknown Source)
java.util.AbstractList.add(Unknown Source)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
据我所知,Bundle并且Parcelable属于Android执行序列化的方式.例如,它用于在活动之间传递数据.但我想知道,如果在将Parcelable业务对象的状态保存到内部存储器的情况下使用而不是经典序列化有什么好处吗?它会比传统方式更简单或更快吗?我应该在哪里使用经典序列化以及哪里更好地使用捆绑包?
我有一个ArrayList自定义的简单Serializable对象,我想缓存到磁盘并重新启动时读取.我的数据很小,大约有25个对象,最多有5个列表,所以我认为SQLite会有点过分.在我将使用的iPhone世界中NSKeyedArchiver,NSKeyedUnarchiver哪个效果很好.在Android上,我试图用a FileOutputStream和for来做这个,ObjectOutputStream虽然结果是相同的,但性能很糟糕.是否有更好的(更快阅读)方式将小对象缓存到Android中的文件系统?
我有一个用于不可变用途的类,因此我想标记所有字段final.
但是,该类被序列化和反序列化以通过网络发送.为此,需要一个空构造函数.这可以防止我创建最终字段.
我确信这是一个相当普遍的问题,但我找不到解决方案.我该怎么办?
如果我们实现Serializable,我们不需要它.为什么这个差异呢?它与序列化的实际机制有什么关系?
我有一个复杂的对象,由LCDS DataServices数据管理管理,并使用自定义汇编程序创建/更新等.绝大多数对象层次结构正在被正确地序列化/反序列化,但在序列化不可变java类时,我遇到了绊脚石.
在一个只有Java的世界中,我会使用java writeReplace和readResolve方法,因为这篇优秀的博客描述了这样的内容:http://lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/
这就是我最初编写java类的方法,期望livecycle调用writeReplace方法并适当地用可变类替换不可变类以进行序列化.然而,似乎lcds对writeReplace方法一无所知,只会调用readExternal/writeExternal而忽略readResolve和writeReplace.
首先,让其他人发现这种情况,或者我错过了什么?
其次,有没有人想出一个适当的方法来将actionscript类反序列化为不可变对象或单例?
非常感谢
我读到了
Externalizable 为我们提供了 writeExternal() 和 readExternal() 方法,这使我们可以灵活地控制 Java 序列化机制,而不是依赖于 Java 的默认序列化。
但是,如果我实现了 Serializable 并覆盖,readObject(), writeObject(), 那么它是否也意味着我正在自定义序列化过程?
它有什么不同?
谢谢。
我从这篇文章中了解到Serializable非常容易实现,并且可以灵活地进行更改(在大多数情况下,您要做的就是更新serialversionUID)。如果我们想控制读写过程,我们可以实现Externalizable。
如果只需要控制读写过程,就可以覆盖以下方法进行序列化,对吗?为什么我们需要引入新的接口Externalizable?
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
Run Code Online (Sandbox Code Playgroud) 让我们有三个类命名Tester_1,Tester_2,Tester_3.它们被定义为:
Tester_1:
class Tester_1 {
public static void main(String args[]) {
Tester_2.setBoolean(true);
System.out.println(Tester_2.getBoolean());
}
}
Run Code Online (Sandbox Code Playgroud)
Tester_2:
class Tester_2 {
public static boolean var = false; // Static var
public static void setBoolean(boolean value) {
var = value;
}
public static boolean getBoolean() {
return var;
}
}
Run Code Online (Sandbox Code Playgroud)
Tester_3:
class Tester_3 {
public static void main(String args[]) {
System.out.println(Tester_2.getBoolean());
}
}
Run Code Online (Sandbox Code Playgroud)
在编译完所有三个类之后,我按以下顺序运行它们:
java Tester_1
java Tester_3
Run Code Online (Sandbox Code Playgroud)
但我得到这个输出:
真正从第一次运行和假从第二次运行.这是为什么 ?当Tester_1将布尔值设置为一个值时,true为什么我false …
我怎样才能自己实现序列化.意思是我不希望我的类实现可序列化.但我想自己实现序列化.因此,如果不实现可序列化,我可以通过网络传输对象或将它们写入文件,然后在相同状态下检索它们.我想这样做,因为我想学习和探索事物.