是否可以使用多个java ObjetOutputStream对象来写入单个java ObjectInputStream对象?

时间:2013-04-22 08:24:45

标签: java sockets stream objectinputstream objectoutputstream

我有一个标准的客户端/服务器设置。

我想要构建的程序很像邮件办公室(这是我的服务器)。多人(带有ObjectOutputStream的客户端)将办公室(带有单个ObjectInputStream的服务器)邮件与附加地址一起交给办公室,办公室将邮件发送到应该去的地方。如果可能的话,我想在服务器中有一个ObjectInputStream阻塞,等待“邮件”从任何 ObjectOutputStream进来,然后发送“mail”到它应该的位置走。这样我就可以拥有一个完全专用于接收数据并发送它的线程。

我将为每个人的客户端提供一个带有ObjectOutputStream的线程,但是也不想在服务器中需要一个匹配的线程来与每个人进行通信。我对这个想法感兴趣,因为我觉得构建大量的线程来分别处理连接是多余的,因为在我的情况下,单个线程可能只发送一次数据。

这可行吗?还是只是傻乎乎的?

3 个答案:

答案 0 :(得分:3)

使用Java Message Service的JMS队列,是本案例的设计模式。 http://en.wikipedia.org/wiki/Java_Message_Service

答案 1 :(得分:0)

如果您在服务器应用程序中只有一个ObjectInputStream实例并且您有许多客户端,则此实例需要由所有线程共享,因此您需要同步对其的访问。

您可以阅读更多here。希望这会有所帮助。

你可以拥有一个ObjectInputStream个实例池,并使用Round Robin(doc)之类的赋值算法,例如,你可以为每个x order线程返回相同的实例...这将使服务器应用程序中的流程更加平行

答案 2 :(得分:0)

你的问题没有意义。您需要一对单独的ObjectInputStreamObjectOutputStream / Socket 。您Thread需要 Socket, ,除非您准备通过InputStream.available()忍受轮询的明显限制,不会阻止您的读取阻止。如果您正在使用对象序列化,那么您已经承诺阻止I / O,因此也就是每个Socket的一个线程。