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 回答