0

我有一个ObjectOutputStream和一个ObjectInputStream。我尝试通过它们发送整数和对象。现在我设法发送并阅读了一个点,我不知道为什么它停在那里。

这是重点:

读者:

    while (true) {
        start = in.readInt();
        System.out.println("PART 1");
        int temp1 = in.readInt();
        int temp2 = in.readInt();
        int temp3 = in.readInt();
        System.out.println("PART12");
        Chunk temp = new Chunk(temp1,temp2, temp3);
        while (true) {

它没有到达第 12 部分(没有通过第一个 int ......)

作家:

 if (chunkList != null) {
        for (Chunk c: chunkList) {
            out.writeInt(-1);
            out.writeInt(c.getLocation().getX());
            out.writeInt(c.getLocation().getY());
            out.writeInt(c.getLocation().getZ());
            if (c.getTileList() != null) {

它成功地通过了所有这些。

我每 2ms out.flushing 在一个单独的线程中。

线:

 while (true)
        {
            while (c.sendPacket()) {

            try
            {
                if (c.getOut() != null)
                {
                    c.getOut().flush();
                }
            }
            catch (IOException ioexception)
            {
                ioexception.printStackTrace();
            }

            try
            {
                sleep(2L);
            }
            catch (InterruptedException interruptedexception) { }
            }
        }

为什么它在 3 个整数的部分停止读取?

4

1 回答 1

0

我有一种感觉,这是一个线程安全问题。作为一般规则,流并非设计为线程安全的。因此,除非您在更高级别同步两个线程,否则一个线程写入流而第二个线程调用刷新是不安全的。

于 2012-05-26T01:54:34.777 回答