gpt4 book ai didi

java - 如何通过网络传递对象的静态数据?

转载 作者:行者123 更新时间:2023-12-01 09:43:24 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的程序来使用网络传递对象。由于对象可能包含静态数据,我不知道如何传递该数据,因为接收到数据后,静态数据将被重置。这怎么可能?

import java.io.*;
import java.net.Socket;

public class client {
private static int PORT = 8901;
private static Socket socket;

public static void main(String[] args) throws Exception{
socket = new Socket("localhost", PORT);
dataStruct ds = new dataStruct();
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
dataStruct.khar = 1;
oos.writeObject(ds);
oos.close();
}
}
class dataStruct implements Serializable{
static int khar = 0;
public void setData(int khar){
this.khar = khar;
}
}

这是我的客户端,以下是我的服务器:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class test {
public static void main(String[] args) throws Exception {
ServerSocket listener = new ServerSocket(8901);
Game game = new Game();
Game.Player player1 = game.new Player(listener.accept(), 1);
player1.start();
}
}

class Game {
class Player extends Thread {
int turn;
Player opponent;
Socket socket;
ObjectInputStream input;

public Player(Socket socket, int turn) {
this.socket = socket;
this.turn = turn;
try {
input = new ObjectInputStream(socket.getInputStream());
} catch (IOException e) {
System.out.println("Player died: " + e);
}
}

public void run() {
try {
dataStruct ds = (dataStruct)input.readObject();
System.out.println(ds.khar);
} catch (Exception e) {
System.out.println("Player died: " + e);
} finally {
try {socket.close();} catch (IOException e) {}
}
}
}
}

最佳答案

对象中不存在静态数据。一个物体,i。 e.类的实例,只有实例数据。静态数据属于类,而不属于任何特定实例。如果您使用Java序列化机制而没有自己的序列化策略,而只是使用默认值,那么静态数据当然不会被传输,因为您正在序列化实例,并且静态数据与实例不直接相关,而只是通过与对象所属的类相关。

关于java - 如何通过网络传递对象的静态数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38276013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com