2012-03-29 3 views
0

私は、サーバー上のサーバからのデータがシリアライズされた配列か単純な文字列かどうかをチェックする方法は?

ArrayList<String> arr=new ArrayList<String>(); 

をシリアル化し、クライアントにこの配列を送信する必要があります。

私はそれをシリアル化し、socket.getOutputStream()に書き込む:

ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
    try{ 
     ObjectOutputStream oos=new ObjectOutputStream(bos); 
     oos.writeObject(arr); 
     oos.close(); 
     socket.getOutputStream().write(bos.toByteArray()); 
    }catch(IOException exc) 
    { 
     System.out.println("Series erro!"); 
    } 

クライアントは、サーバー

 byte[] buf=new byte[1024*100]; 
     //данные приходные 
     int r=s.getInputStream().read(buf); 

そして、どのようにそれは私のArrayListあるかどうかを確認してからデシリアライズするか、単に文字列からバイトを受け取りますか?

答えて

3

あなたは確認する必要はありません。あなたはシリアライズされたオブジェクトを書きました。シリアライズされたオブジェクトです。 ObjectInputStream.readObject()で読んでください。

instanceofでシリアル化されたオブジェクトのタイプを確認できます。

そして、そこにはByteArrayOutputStreamは必要ありません。 new ObjectOutputStream(socket.getOutputStream())を作成し、writeObject()を直接実行してください。あなたはこのように時間と空間とお金を浪費しています。

+0

私はシリアル化された配列を送信するだけではありません。私は文字列も送る - 異なるメッセージをクライアントに送る。 –

+1

@АртёмЦарионовこれらを 'writeObject()'ですべて書き、 'readObject()'ですべて読み込み、 'instanceof'でそれらをテストすることができます。次に何が来るのかわからない場合は、APIを混在させないでください。 – EJP

関連する問題