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类序列化的字节数据。如果内部表现有细微的不同。我应该调整我的问题。我只是重新阅读并编辑了我的问题。包含该类是有用的信息。如果字节数组在不同程序之间交换,字节流将是可交换的。