eofexception异常解决方法(附常见问题)

EOFException

  • IO异常的子类,End of File表示流的尾部。
  • 流已经到末尾了,而大部分做法是以特殊值的形式返回给我们,而不是抛异常。
  • 异常是被主动抛出来的,而不是底层或者编译器主动返回。

返回特殊值处理方式

InputStream.read()

Returns:

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

Throws:

IOException – If an I/O error occurs

BufferedReader.readLine()

Returns:

A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached

Throws:

IOException – If an I/O error occurs

EOFException Example

package com.cclu.socket;
import java.io.*;import java.net.Socket;
/** * @author ChangCheng Lu * @date 2023/8/17 8:00 */public class GreetingClient {    public static void main(String[] args) {        String serverName = "127.0.0.1";        int port = Integer.parseInt("1427");        Socket client;        try {            System.out.println("连接到主机:" + serverName + " ,端口号:" + port);            // init the socket of the client            client = new Socket(serverName, port);            System.out.println("远程主机地址:" + client.getRemoteSocketAddress());            OutputStream outToServer = client.getOutputStream();            DataOutputStream out = new DataOutputStream(outToServer);            out.writeUTF("Hello from " + client.getLocalSocketAddress());            InputStream inFromServer = client.getInputStream();            DataInputStream in = new DataInputStream(inFromServer);            System.out.println("服务器响应:" + in.readUTF());            client.close();        } catch (IOException e) {            System.out.println();        }    }}

 

处理建议

对于这种异常的一般解决方法就是,捕获,可以记录日志,也可以不做处理,捕获异常以后,把之前读到的数据进行后续的处理就可以了,因为那就是所以的数据。还有就是如果打算记录日志,不要把它的堆栈信息打印出来,容易给人以错觉。毕竟EOFException实质上只是一个消息而已。

当然抛异常的做法还是有一些偏激,但是当ObjectInputStream在不知道读取对象数量的情况下,确实无法判断是否读完,除非你把之前写入对象流的数量记录下来。所以说出现这个异常时就认真分析一下,这个异常是不是代表一个信息。

相关问题:

 java.lang.EOFException(文件已结束异常)

当程序在输入的过程中遇到文件或流的结尾时,引发异常。因此该异常用于检查是否达到文件或流的结尾

“EOFException”

当输入期间意外终止文件或流时,将抛出“EOFException”。 以下是抛出EOFException异常的一个示例,来自JavaBeat应用程序:

import java.io.DataInputStream;import java.io.EOFException;import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class ExceptionExample {    public void testMethod1() {        File file = new File("test.txt");        DataInputStream dataInputStream = null;        try {            dataInputStream = new DataInputStream(new FileInputStream(file));            while (true) {                dataInputStream.readInt();            }        } catch (EOFException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                if (dataInputStream != null) {                    dataInputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) {        ExceptionExample instance1 = new ExceptionExample();        instance1.testMethod1();    }}

运行上面的程序,将抛出以下异常:

java.io.EOFExceptionat java.io.DataInputStream.readInt(DataInputStream.java:392)at logging.simple.ExceptionExample.testMethod1(ExceptionExample.java:16)at logging.simple.ExceptionExample.main(ExceptionExample.java:36)

当DataInputStream类尝试在流中读取数据但没有更多数据时,将抛出“EOFException”。它也可以发生在ObjectInputStream和RandomAccessFile类中。

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/76665.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年5月22日 上午11:53
下一篇 2024年5月22日 下午1:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注