我想知道是否有一种简单的方法可以保存对象数组,而无需通过并保存对象的每个方面。在我的示例中,我有两个数组,一个是单个数组,另一个是2D数组,包含引用自定义类的对象。每个对象都有特定的细节,如x和y整数,布尔值,字符串等。附加到它们(块[0] .x,块[0] .canWalk,块[0] .name)我想知道是否有一种简单的方法将这些数组保存到文件而不必使用for循环和保存每个部分。多维数组只是与第一个数组相同的已保存数组的数组(savedBlock [0] [0] .x ...)
到目前为止(抛出NotSerializableException):
public class Save
{
static File f;
static ObjectOutputStream os;
public static void openFile()
{
try
{
if(!new File("c:\\IDsGame").exists())
{
new File("c:\\IDsGame").mkdirs();
}
f = new File("c:\\IDsGame\\data.bin");
os = new ObjectOutputStream(new FileOutputStream(f));
writeFile();
}
catch(Exception e)
{
System.err.println("creating file");
}
}
public static void writeFile()
{
try
{
ArrayList<Object> map = new ArrayList<Object>(Arrays.asList(Map.block));
ArrayList<Object> savedMaps = new ArrayList<Object>(Arrays.asList(Map.savedMaps));
os.writeObject(map);
os.writeObject(savedMaps);
os.close();
}
catch (IOException e) {System.out.println(e);}
}
}
在我的map类中,我初始化块(Blocks [])和savedMaps(Blocks [] [])。 My Blocks类认为:
public class Blocks implements Serializable
{
public boolean canWalk, onTop, itemTaken;
public Image img = null, imgBack = null;
public final Image (a ton of different images)
public String name, item, message, title;
public char initMap, initEx, initIt;
public int x, y, height, width;
public Blocks()
{
canWalk = true;
onTop = false;
itemTaken = false;
img = null;
name = null;
item = null;
message = null;
x = 0;
y = 0;
height = 0;
width = 0;
}
}
显然我在Map类中更改了不同数组的某些部分,我想知道是否有更简单的方法(根本)保存Blocks对象的数组。
感谢您抽出宝贵时间提供帮助,如果您需要更具体的信息,请告诉我们。
I.D。
答案 0 :(得分:0)
图像不可序列化,因此在序列化Blocks类时会收到NotSerializableException。 ImageIcon可以被序列化,因此在ImageIcons中包装Image实例将解决该问题。
public class Blocks implements Serializable
{
public boolean canWalk, onTop, itemTaken;
public ImageIcon img = null, imgBack = null;
public final ImageIcon (a ton of different images)
public String name, item, message, title;
public char initMap, initEx, initIt;
public int x, y, height, width;
public Blocks()
{
canWalk = true;
onTop = false;
itemTaken = false;
img = null;
// img = new ImageIcon(someImageInstance)
name = null;
item = null;
message = null;
x = 0;
y = 0;
height = 0;
width = 0;
}
}
答案 1 :(得分:0)
仅仅创建一个类实现Serializable
是不够的:所有字段也必须是Serializable
。
您的Block
课程可能有问题。所有常见的java类都是Serializable
,但Block
也有Image
类型的字段。如果Image
不是Serializable
,则尝试序列化Block
会抛出NotSerializableException
。