2

だから私はString[]オープンソケット接続を介して送信しようとしています。私は現在、このコードを持っています:

送信:

public void sendData() {
    try {
        OutputStream socketStream = socket.getOutputStream();
        ObjectOutputStream objectOutput = new ObjectOutputStream(socketStream);
        objectOutput.writeObject(new String[] {"Test", "Test2", "Test3"});

        objectOutput.close();
        socketStream.close();

    } catch (Exception e) {
        System.out.println(e.toString());
    }
}

受信:

public Object readData() {
    try {
    InputStream socketStream = socket.getInputStream();
    ObjectInputStream objectInput = new ObjectInputStream(new GZIPInputStream(socketStream));
    Object a = objectInput.readObject();
      return a;
    } catch(Exception e) {
        return null;
    }
}

反対側で受け取った後String[]、値を取得できるように、通常どおりに反復できるようにしたいと考えています。私の現在のコードは、値として返されるため、機能していないようですnull

これは可能ですか?

4

2 に答える 2

8

私の現在のコードは、値として null を返すため、機能していないようです。

そして、その理由も明らかです!

} catch(Exception e) {
    return null;
}

それは、「何か問題が発生した場合は、戻っnullてきて、何が問題だったのか教えないでください」ということです。

そのような例外をキャッチしてつぶすことは悪い習慣です。少なくとも、例外のスタック トレースを出力するようにしてください。ライター コードでは、次のようにします。

System.out.println(e.toString());

これは何もないよりはましですが、例外の名前とメッセージを出力するだけです。あなたは本当に完全なスタックトレースを出力する必要があります...次のように:

e.printStackTrace(System.out);

また、製品品質のコードの場合、標準出力にメッセージを書き込むだけでなく、おそらく例外をログに記録する必要があります。

スタック トレースを取得したら、実際の問題を特定して修正できます。

于 2012-06-03T04:33:01.363 に答える
-2

私は自分でそれを理解することができました、私は私の受信コードをこれに変更しました:

public String[][] readData() {
    try {
    InputStream is = socket.getInputStream();
    ObjectInputStream ois = new ObjectInputStream(is);
     return (String[][])ois.readObject();
    } catch(Exception e) {
        return null;
    }
}

今では魅力のように機能します。皆さんありがとう!

于 2012-06-03T04:41:24.737 に答える