0

私は、降下の解決策を思いつくことができないものに出くわしました。サーバーからクライアントにいくつかの string[] メッセージを送信しましたが、画像も送信したいと考えています。問題は、バイト[]ではなく、クライアント側のオブジェクトをチェックすることです。これにより、画像が到着したときに画像を処理する際に問題が発生します。

今、私はこれを受信文字列[]に使用します:

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 に答える