我有一个用于小型多人游戏的Java服务器。通过连接的套接字,我想在关键字更新到达时向我的客户端发送两个不同的数组。
output.reset();
output.writeObject(array1);
output.writeObject(array2);
其中array1为 int [16] ,array2为 int [2] [2] 。
在Android客户端中,我有两个 AsyncTask来捕获数组。
@Override
protected int[] doInBackground(ObjectInputStream...params) {
ObjectInputStream ois = params[0];
try {
arrayFromServer = (int[]) (ois.readObject());
} catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arrayFromServer;
}
和
@Override
protected int[][] doInBackground(ObjectInputStream... params) {
ObjectInputStream ois = params[0];
try {
complexArrayFromServer = (int[][]) (ois.readObject());
} catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return complexArrayFromServer;
}
我正在将它们传递给我的UI活动,其中的计时器每20秒发送一次关键字更新。
public void startTimer() {
timer = new Timer();
initializeTimerTask();
timer.schedule(timerTask, 5000, 20000);
}
public void initializeTimerTask() {
timerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
//AsyncTask
new CardTask() {
@Override
public void onPostExecute(int[] result) {
mFromServer = result;
}
}.execute(ois);
//AsyncTask
new PointsAndCardsTask() {
@Override
public void onPostExecute(int[][] result) {
mComplexArray = result;
}
}.execute(ois);
}
});
}
};
}
但是这给我的游戏带来了一些问题,我很想知道我在发送数组时是否做错了什么,或者有更好的方法吗?
我得到的错误是
08-17 15:39:57.196: E/AndroidRuntime(665): FATAL EXCEPTION: main
08-17 15:39:57.196: E/AndroidRuntime(665): java.lang.ArrayIndexOutOfBoundsException
因为在期待一个阵列时我会得到另一个阵列。
答案 0 :(得分:0)
我无法解释在Java(de-)序列化这些数组时在Java中发生了什么,但是我确信Java不能在数组之间产生差异,以便您可以&# 39;确保只获得具有所需尺寸的数组。
我会封装您在不同Java对象中发送的数据。通过这样做,您可以使用instance of
来确保您只获得您想要的东西!