2011-12-05 7 views
0

私は何かに出くわします。私はいくつかの文字列[]メッセージをサーバーからクライアントに送信しますが、今でも画像を送信したいと思います。問題は、クライアント部分のオブジェクトをチェックすることで、byte []ではなく、画像が到着したときに問題を処理することができます。イメージを送信中ObjectOutputStream

今、私は私の着信文字列[]のためにこれを使用します。

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(); } 
      } 

     } 

しかし、今私は、この流れは[]の両方の文字列を扱うことができるようにしたいと[]バイト、何かアドバイスはイムが失われた、素晴らしいことです:(

私はこのような何かしたいと思う:

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

をしかし、それは、O = input.readObject(以降は問題does notの)イメージファイルが来るとき私にこれを与える:

12月5日23:00:20.255:/をSystem.err(16157)W: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); 
+0

バイトを書き込むために何を使用しますか。 writeObject(バイト)を使用し、write(バイト)は使用しないでください。 –

+0

私はwriteObjectを使用します。 –

+0

以下は私の箱で動作します:http://pastebin.com/xP2T0Ux2。あなたがデータを書く方法に何か間違っている必要があります。問題を再現するSSCCEを投稿してください。 –

答えて

1

オブジェクトの代わりにバッファリングされた入力出力ストリーム。オブジェクトストリームは、Javaオブジェクトの直列化と直列化解除を処理するためのものです。

+0

String []とbyte [] **は**シリアライズ可能なJavaオブジェクトです。 –

+0

私はそれに同意しますが、私の大学のプロジェクト中に私は同様の問題に直面していました。 –

関連する問題