java中通过套接字发送序列化文件

java中通过套接字发送序列化文件,java,sockets,serialization,file-upload,client-server,Java,Sockets,Serialization,File Upload,Client Server,System.out.println(“Java太棒了!”) 请原谅我的热情;我简直不敢相信Java有多强大,它不仅能够保存(并加载)对象,而且其主要目的是通过网络发送对象。这正是我必须做的,因为我正在进行beta测试。在这个beta测试中,我给测试人员提供了一个版本的游戏,它将数据作为对象保存在大多数人不知道的位置(我们是开明的人哈哈)。这将很好地工作,除了它不是为了长期坚持。但是,我可以通过客户机/服务器与套接字的交互来收集他们的record.ser和counter.bin文件(后者告诉我r

System.out.println(“Java太棒了!”)

请原谅我的热情;我简直不敢相信Java有多强大,它不仅能够保存(并加载)对象,而且其主要目的是通过网络发送对象。这正是我必须做的,因为我正在进行beta测试。在这个beta测试中,我给测试人员提供了一个版本的游戏,它将数据作为对象保存在大多数人不知道的位置(我们是开明的人哈哈)。这将很好地工作,除了它不是为了长期坚持。但是,我可以通过客户机/服务器与套接字的交互来收集他们的
record.ser
counter.bin
文件(后者告诉我
record.ser
中有多少个对象)(在我开始阅读之前,我对这些文件一无所知,但我仍然感到不知所措)。我在网上看到的大多数示例(例如:)都是以字节流的形式发送文件,即一些ObjectOutputStream和ObjectInputStream。这正是我当前版本的游戏用来保存/加载游戏数据的地方


很抱歉这个冗长的介绍,但你知道我必须做什么(步骤明智,所以我可以理解)实际发送整个文件。我需要一个字节一个字节(或一个对象一个对象)地重建文件吗?

其实很简单。只需将对象序列化,并创建一个ObjectOutputStream和ObjectInputStream,它们连接到您拥有的任何底层流,比如FileInputStream,等等。然后只需将()任何对象写入流并在另一端读取

这是给你的礼物

对于插座,它将类似于

ObjectOutputStream objectOut = new ObjectOutputStream(serverSocket.getOutputStream());
ObjectInputStream objectIn = new ObjectInputStream(clientSocket.getInputStream());

其实这很简单。只需将对象序列化,并创建一个ObjectOutputStream和ObjectInputStream,它们连接到您拥有的任何底层流,比如FileInputStream,等等。然后只需将()任何对象写入流并在另一端读取

这是给你的礼物

对于插座,它将类似于

ObjectOutputStream objectOut = new ObjectOutputStream(serverSocket.getOutputStream());
ObjectInputStream objectIn = new ObjectInputStream(clientSocket.getInputStream());

Java序列化是一个非常强大的协议
java.io.ObjectOutputStream
java.io.ObjectInputStream
是更高级别的类,当然,这些类用较低级别的类包装,例如
FileInputStream
FileOutputStream
。我的问题是,当可以在
对象中读取整个文件时,为什么要逐字节读取文件

下面是对该过程的一个很好的解释


Java序列化是一种非常强大的协议
java.io.ObjectOutputStream
java.io.ObjectInputStream
是更高级别的类,当然,这些类用较低级别的类包装,例如
FileInputStream
FileOutputStream
。我的问题是,当可以在
对象中读取整个文件时,为什么要逐字节读取文件

下面是对该过程的一个很好的解释


您不发送文件,而是发送序列化对象本身。因此,在ObjectOutputStream下面,使用服务器套接字的输出流。我希望这是一个答案,这样我就可以向上投票,并将其标记为接受答案。您不发送文件,而是发送序列化对象本身。因此,在ObjectOutputStream下面,使用您的服务器套接字输出流。我希望这是一个答案,这样我就可以投票并将其标记为已接受的答案。逐字节读取文件从来不是我的意图。逐字节读取文件从来不是我的意图。我已经完成了第一部分:使对象可序列化。事实上,这就是游戏数据存储在计算机上的方式;作为序列化对象。你知道有没有办法追踪谁在向我发送游戏数据(因为互联网上的任何人都可以这样做)?哦,我从来没有弄乱过客户机-服务器交互或套接字。这个问题更多的是一个与建议相关的问题:如果beta测试仪的机器将游戏数据(它将)发送到我的计算机,这会使我的计算机成为服务器,而他们的计算机成为客户机吗//我的电脑将把他们的游戏数据写入数据库。谁能把数据发送到你的套接字呢。Socket=IP+端口,这对您来说非常特殊。如果测试仪的机器向你发送数据,他们是服务器,你是客户端。告诉我@Aniket Thakur,在线游戏的分数是如何保存的?(就客户机-服务器而言)客户机-服务器是相对的术语。当你说你在网上玩游戏时,意味着你在某个服务器上玩游戏(你的电脑就是客户端)。现在您正在保存beta tester的机器正在向您发送一些数据,这意味着您(作为客户机)将要求机器(服务器)向您提供游戏数据。请注意,您不是唯一一个玩游戏的客户,因此也不是唯一一个获取游戏数据的客户。最后,您说您正在将获取的数据存储在某个数据库中。这将再次使您成为客户机和作为服务器承载数据库的基础结构。事实上,这就是游戏数据存储在计算机上的方式;作为序列化对象。你知道有没有办法追踪谁在向我发送游戏数据(因为互联网上的任何人都可以这样做)?哦,我从来没有弄乱过客户机-服务器交互或套接字。这个问题更多的是一个与建议相关的问题:如果beta测试仪的机器将游戏数据(它将)发送到我的计算机,这会使我的计算机成为服务器,而他们的计算机成为客户机吗//我的电脑将把他们的游戏数据写入数据库。谁能把数据发送到你的套接字呢。Socket=IP+端口,这对您来说非常特殊。如果beta测试仪的机器向您发送数据,那么它们就是服务器,而您就是客户机