0

我遇到了一些我无法想出下降解决方案的东西。我从服务器向客户端发送了一些字符串 [] 消息,但现在我也想发送图像。问题是我检查客户端部分的对象,而不是字节 [],这给我处理图像时遇到的问题。

现在我将它用于传入的字符串 []:

public void run() 
        {
            while(active)
            {

                try 
                {
                    Object o;
                    o = input.readObject();

                    System.out.println("Received from server!");

                    if ( o instanceof String[])
                    {
                        String[] names = (String[]) o;

                        Refresh.getInstance().update( names );                      
                    }
                } 
                catch (OptionalDataException e)     { e.printStackTrace(); Terminate(); } 
                catch (ClassNotFoundException e)    { e.printStackTrace(); Terminate(); }
                catch (IOException e)               { e.printStackTrace(); Terminate(); }
            }

        }

但是现在我希望这个流能够同时处理 String[] 和 bytes[],任何建议都会很棒,我迷路了 :(

我想要这样的东西:

if ( o instanceof byte[])
{
    // ...              
}

但这没关系,因为 o = input.readObject() 在图像文件到来时给了我这个:

12-05 23:00:20.255:W/System.err(16157):java.io.StreamCorruptedException:格式错误:ac

写入字节的代码:

FileInputStream fis = new FileInputStream("images\\test.jpg");
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
ObjectOutputStream oos = new ObjectOutputStream(serverSocket.getOutputStream()) ;
oos.writeObject(buffer); 
4

1 回答 1

1

您应该使用缓冲输入输出流而不是对象。由于对象流旨在处理 java 对象的序列化和反序列化。

于 2011-12-05T22:34:12.650 回答