Java ObjectInputStream java.io.EOFException

标签 java mysql sockets inputstream eofexception

我正在尝试使用套接字将数据从 MySQL 传递到客户端。对于 List,我更喜欢使用数组,但如果我使用此发送数组:

InputStream input = client.getInputStream();
        OutputStream output = client.getOutputStream();
        ObjectOutputStream obOutput = new ObjectOutputStream(output);
        Statement statement = dataConnection.createStatement();
        ResultSet modList = statement.executeQuery("SELECT modID, downloads FROM modRegister");
        String[][] mods = new String[3][3];
        int column = 0;
        while (modList.next()) {
            mods[column][1] = modList.getString("modID");
            mods[column][2] = modList.getString("downloads");
            ++column;
        }

        System.out.println(mods[1][1]);

        PrintWriter printClient = new PrintWriter(output);
        printClient.println(column);
        printClient.close();
        obOutput.writeObject(mods);
        obOutput.flush();

并使用以下方式从客户端接收它:

Socket server = new Socket("localhost", 25566);
    InputStream input = server.getInputStream();
    OutputStream output = server.getOutputStream();
    ObjectInputStream obInput = new ObjectInputStream(input);
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String s;
    int columns = 0;
    while((s = reader.readLine()) != null) {
        columns = Integer.parseInt(s);
        System.out.println(s);
    }
    String [][] mods;
    TimeUnit.SECONDS.sleep(10);
    mods = (String[][])obInput.readObject();

即使有时间延迟,我也收到 EOFException 。该数组有效。我测试了打印其中的所有数据。这是异常(exception)情况:

Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2601)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at layout.MainStoreController.initialize(MainStoreController.java:36)
... 32 more

最佳答案

我怀疑关闭 PrintWriter 会关闭它写入的 OutputStream。

PrintWriter printClient = new PrintWriter(output);
printClient.println(column);
printClient.close();

当流关闭时,套接字也关闭,另一端将在读取时观察到文件结束符。

关于Java ObjectInputStream java.io.EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31661495/

相关文章:

java - ClassNotFoundException : com. amazonaws.auth.AWSCredentials - java

php - MYSQL 排序依据和分组依据

javascript - 将phonegap 图像发布到php/mysql - 图像字段从发布请求中消失?

sockets - 套接字端口与监听端口不匹配

c# - 套接字超时后删除任何待读取的数据

将日期解析为 MS JSON 日期格式的 Java 方法

java - 从 Java 文本文件中读取直到特定点

java - Spring AMQP RabbitMQ 代码中的发送方是否不提供交换类型?

mysql - 如何根据明细表中存在的2个条件在MySQL主表中选择1行

Python高效的套接字通信