Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将扩展另一个类的类外部化_Java - Fatal编程技术网

Java 如何将扩展另一个类的类外部化

Java 如何将扩展另一个类的类外部化,java,Java,导言 我有以下课程: public class Foo extends ArrayList<ElementsClass> implements Externalizable { Field field1 = new Field(); Field field2 = new Field(); ... } 观察 其中一个字段不可序列化,这就是我实现可外部化的原因。我只想把我能做的事情具体化 问题 虽然我知道如果ElementsClass是可序列化的,那么Arra

导言

我有以下课程:

public class Foo extends ArrayList<ElementsClass> implements Externalizable {
    Field field1 = new Field();
    Field field2 = new Field();

    ...
}
观察

其中一个字段不可
序列化
,这就是我实现
可外部化
的原因。我只想把我能做的事情具体化

问题


虽然我知道如果
ElementsClass
是可序列化的,那么
ArrayList
是可序列化的,但我不知道如何将类
Foo
本身外部化。

你的类
Foo
不是已经外部化了吗

如果执行下面的语句,它应该在文件中写入带有外部化属性项的对象

    Foo class = new Foo();
    FileOutputStream fos = new FileOutputStream("temp");
    ObjectOutputStream oos= new ObjectOutputStream(fos);
    oos.writeObject(class );

我认为您应该尝试自定义序列化,就像这里描述的那样:

试试这个:

public void writeExternal(ObjectOutput out) throws IOException {        
    out.writeObject(super.toArray());
    out.writeObject(field1);
    out.writeObject(field2);
}

public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
    Object[] arr = (Object[]) in.readObject();
    for (int k=0; k<arr.length; k++) super.add(arr[k]);
    field1 = (Field) in.readObject();
    field2 = (Field) in.readObject();
}
public void writeExternal(ObjectOutput out)抛出IOException{
out.writeObject(super.toArray());
out.writeObject(字段1);
out.writeObject(字段2);
}
public void readExternal(ObjectInput in)引发IOException、ClassNotFoundException{
.readObject()中的对象[]arr=(对象[]);

对于(int k=0;kWhat class
class
你是说?
java.lang.class
还是你自己的?用标准名称命名自定义类是不好的做法。对不起,我使用了一个不明确的名称,我的意思是
Foo
类。你的代码会抛出一个
NotSerializable
异常,因为我的
Foo
类包含一个不可序列化的字段t serializable。这就是我实现Externalizable的原因。这就是为什么您使用
Externalizable
来代替
serializable
。在
writeExternal
中,直接编写字段,这些字段是
serializable
。对于
非searializable
字段,手动获取内部属性,然后编写它们。您可以在
readExternal
方法中使用了相同的
reverse
。我不需要外部化不可序列化的字段。我只是跳过它们。问题是我需要外部化类本身,我不知道如何做。@Kits89您已经接受了与我在这里提到的答案非常相似的答案。不是吗当然,你还期待什么?
public void writeExternal(ObjectOutput out) throws IOException {        
    out.writeObject(super.toArray());
    out.writeObject(field1);
    out.writeObject(field2);
}

public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
    Object[] arr = (Object[]) in.readObject();
    for (int k=0; k<arr.length; k++) super.add(arr[k]);
    field1 = (Field) in.readObject();
    field2 = (Field) in.readObject();
}