我在某个地方读到了让我不确定并寻找替代方法的地方。呼叫reset()过于频繁是否会导致网络紧张,或者对此没有必要?
我正在通过 ObjectOutputStream 使用 TCP 发送一个对象。对象值在再次写入之前已更改。现在是同一个对象但包含不同的值,没有reset()它重新发送之前发送的缓存对象的引用,该引用被读取为没有更改。reset()由于这种压力,我不确定使用是否是一个好主意。我应该寻找另一种方式吗?
示例代码如下:
Socket socket = new Socket(ip, port);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(bos);
while(true){
oos.writeObject(object);
oos.flush();
oos.reset();
object.x++;
}
Run Code Online (Sandbox Code Playgroud) 如何将整数值转换为字节数组,然后通过字节流将它们发送到客户端程序,该程序将字节数组转换回整数?
我的节目是乒乓球比赛.一旦运行,它就会创建一个服务器,客户端现在使用对象流通过Internet连接到该服务器.一切都运作良好,但似乎效率不高.我的意思是球在试图通过更新循环保持同步时来回震动.我可能已经松散地编程了,但这是我能想到的最好的.我希望有更多了解这种事情如何运作的人可以帮助我澄清一些事情.
我的问题直截了当.我需要知道更好的方式来更有效地通过互联网发送球位置和球员位置.目前花费的时间太长了.虽然,我可能会以错误的方式更新它.
流的构建方式:
oostream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
oostream.flush();
oistream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
Run Code Online (Sandbox Code Playgroud)
这是玩家2的更新循环:
IntData id = new IntData();
while (running) {
id.ballx = ballx;
id.bally = bally;
id.player2Y = player2Y;
oostream.writeObject(id);
oostream.flush();
Thread.sleep(updaterate);
id = (IntData) oistream.readObject();
player1Y = id.player1Y;
ballx = id.ballx;
bally = id.bally;
}
Run Code Online (Sandbox Code Playgroud)
播放器1是服务器主机.这是玩家1的更新循环:
IntData id = new IntData();
while (running) {
id = (IntData) oistream.readObject();
player2Y = id.player2Y;
ballx = id.ballx;
bally = id.bally;
Thread.sleep(updaterate);
id.ballx …Run Code Online (Sandbox Code Playgroud)