Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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_Serialization_Deserialization - Fatal编程技术网

Java 可选内部字段的序列化

Java 可选内部字段的序列化,java,serialization,deserialization,Java,Serialization,Deserialization,如果发出了相同的程序,但仅对字段栏的数据结构进行了一次更改,则会出现差异 当bar表示相同的值HelloWorld时,序列化是否会有所不同 序列化/反序列化过程是否不能在不同版本之间交换 例如: //bar only represents "HelloWorld" //Program 1 field is String Class foo{ String bar; //"HelloWorld" } //Program 2 field is Character[] Class foo{


如果发出了相同的程序,但仅对字段
栏的数据结构进行了一次更改,则会出现差异

  • bar
    表示相同的值
    HelloWorld
    时,序列化是否会有所不同
  • 序列化/反序列化过程是否不能在不同版本之间交换
  • 例如:

    //bar only represents "HelloWorld"
    
    //Program 1 field is String
    Class foo{
        String bar; //"HelloWorld"
    }
    
    //Program 2 field is Character[]
    Class foo{
        Character[] bar; //{H','e','l','l','o','W','o','r','l','d'}
    }
    
    //Program 3 field is ArrayList<Character>
    Class foo{
        Arraylist<Character> bar; //{{put('H');put('e');put('l');put('l');put('o');put('W');put('o');put('r');put('l');put('d')}}
    }
    
    //条形图仅表示“HelloWorld”
    //程序1字段为字符串
    福班{
    字符串栏;/“HelloWorld”
    }
    //程序2字段为字符[]
    福班{
    字符[]条;/{H'、'e'、'l'、'l'、'o'、'W'、'o'、'r'、'l'、'd'}
    }
    //程序3字段为ArrayList
    福班{
    数组列表条;//{put('H');put('e');put('l');put('l');put('o');put('W');put('o'));put('r');put('l');put('d')}
    }
    

    我在这里谈论和寻找的内容是否有一个名称或术语?

    Java不允许在同一个包中有多个同名的类。当您试图编译示例时,应该会看到类似“foo已经定义”的错误

    Java序列化包括该类,因此序列化到类“foo”之后不能反序列化到其他“foo2”类中。这也意味着“foo”的序列化将始终不同于“foo2”的序列化

    如果您的目标是拥有一个“foo”类,该类将其字符串公开为字符数组或and ArrayList,那么您可以在单个类中完成这一切,如

    import java.util.*; 
    
    public class TooManyFoo {
        private final String bar;
    
        public TooManyFoo( String bar ) {
            this.bar = bar;
        }
    
        public String getBar() {
            return bar;
        }
    
        public Character[] getBarAsArray() {
            Character[] barAsArray = new Character[bar.length()];
            for ( int i = 0; i < barAsArray.length; i++ ) {
                barAsArray[i] = Character.valueOf( bar.charAt( i ) );
            }
            return barAsArray;
        }
    
        public List<Character> getBarAsList() {
            List<Character> barAsList = new ArrayList<Character>();
            for ( char c : bar.toCharArray() ) {
                barAsList.add( Character.valueOf( c ) );
            }
            return barAsList;
        }
    }
    
    import java.util.*;
    公共类TooManyFoo{
    私人最终字符串栏;
    公共TooManyFoo(字符串栏){
    这个.bar=bar;
    }
    公共字符串getBar(){
    返回杆;
    }
    公共字符[]getBarAsArray(){
    Character[]barAsArray=新字符[bar.length()];
    for(int i=0;i
    另一方面,大多数开发人员只希望通过getter直接使用foo中的字符串栏


    我的观点是,Java序列化包括类,所以您必须反序列化到同一个类。

    我应该更清楚地解释我自己。我在想象发给替代用户的替代程序。他们是否能够交换可选Foo类序列化的字节数据。如果内部表现有细微的不同。我应该调整我的问题。我只是重新阅读并编辑了我的问题。包含该类是有用的信息。如果字节数组在不同程序之间交换,字节流将是可交换的。